【发布时间】:2010-10-03 14:29:57
【问题描述】:
首先我想说下面的示例过于简单化了。 假设您已绑定 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 绑定到实现INotifyPropertyChanged 的 Person 类,并在表单中有 Name 设置器
public string Name
{
get { return _name; }
set
{
_name = "Some Name";
OnPropertyChanged("Name");
}
}
即每当用户尝试从 UI 更改它时,_name 都会被分配“某个名称”。 但是这个示例不起作用。我将 TextBox 中的名称更改为某个值,按下制表符强制焦点移动到 Button,尽管触发了 PropertyChanged 事件,但 TextBox 中的值保持不变。
你能解释一下为什么会这样吗?据我了解PropertyChanged 事件强制 UI 从属性中重新读取值并显示它们,但在我的示例中,数据绑定文本框中的值没有更新。
再次。我知道这是该属性的不良实现,但我想重申这是过于简单化了。 这只是一个样本。 但无论如何,PropertyChanged 表示属性已更改并且应该更新但它没有。
【问题讨论】:
-
呃,我可能错了,但不应该是
{Binding Path=Name}吗? -
不。对于属性绑定,您可以省略 Path 作为快捷方式。
-
这是因为 Binding 有一个以路径为参数的构造函数。
标签: wpf data-binding inotifypropertychanged