首先,我想说下面的示例过于简单化。假设您已绑定 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 绑定到 Person 类,该类实现INotifyPropertyChanged
并在表单中具有 Name setter
public string Name
{
get { return _name; }
set
{
_name = "Some Name";
OnPropertyChanged("Name");
}
}
即,每当用户尝试从 UI 更改它时,_name 都会被分配“某个名称”。但是这个示例不起作用。我将 TextBox 中的名称更改为某个值,按选项卡强制焦点移动到 Button,尽管触发了 PropertyChanged 事件,但 TextBox 中的值保持不变。
你能解释一下为什么会这样吗?据我了解PropertyChanged
,事件会强制 UI 从属性中重新读取值并显示它们,但在我的示例中,数据绑定文本框中的值未更新。
再次。我知道这是该属性的不良实现,但我想重复一遍,这是过于简单化了。这只是一个样本。但无论如何,PropertyChanged 表示属性已更改并且应该更新但它没有。