gpt4 book ai didi

wpf - INotifyPropertyChanged 问题

转载 作者:行者123 更新时间:2023-12-04 10:13:44 29 4
gpt4 key购买 nike

首先,我想说下面的示例过于简单化。
假设您已绑定(bind) WPF 控件。

<Window Title="Window1" Height="300" Width="300">
<Grid>
<StackPanel>
<TextBox Text="{Binding Name}" Margin="10"/>
<Button HorizontalAlignment="Center"
Content="Click Me" Margin="5"
Padding="2" Click="OnButtonClick" />
</StackPanel>
</Grid>
</Window>

Window 绑定(bind)到实现 INotifyPropertyChanged 的 Person 类并在表单中有名称 setter
    public string Name 
{
get { return _name; }
set
{
_name = "Some Name";
OnPropertyChanged("Name");
}
}

IE。每当用户尝试从 UI 更改它时,_name 都会被分配“某个名称”。
但是这个示例不起作用。我将 TextBox 中的名称更改为某个值,按选项卡强制焦点移动到 Button 并且 TextBox 中的值保持不变,尽管触发了 PropertyChanged 事件。

你能解释一下为什么会这样吗?据我了解 PropertyChanged事件强制 UI 从属性中重新读取值并显示它们,但在我的示例中,数据绑定(bind)文本框中的值未更新。

再次。我知道这是该属性的不良实现,但我想重复一遍,这是过于简单化了。
这只是一个样本。
但无论如何,PropertyChanged 表示属性已更改并且应该更新但它没有。

最佳答案

TextBox 忽略 PropertyChanged 事件,因为它是事件的发起者。

一些澄清:

TextBox(或文本框上的绑定(bind))知道它是发起者,因为它在同一个调用中接收到 PropertyChanged 事件。通过执行异步调用,文本框(或绑定(bind))无法知道它是发起者,因此它将处理事件,就好像其他人更新了它一样

如果您将第二个文本框添加到您的 UI,您会看到第二个文本框在您编辑第一个文本框时确实发生了变化,反之亦然。

关于wpf - INotifyPropertyChanged 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/480743/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com