我有一个 TextBlock,与一个对象绑定(bind),当我更新对象的属性时,它没有反射(reflect)在 UI 上,为什么?
代码:
在 Windows1.xaml 中
<TextBlock Name="txtName" Text="{Binding Name, UpdateSourceTrigger=PropertyChanged}" Width="100" Height="20" Margin="12,23,166,218" />
和 Windows.xaml.cs 中
public partial class Window1 : Window
{
Employee obj ;
public Window1()
{
InitializeComponent();
obj = new Employee();
obj.Name = "First";
txtName.DataContext = obj;
}
private void btnUpdate_Click(object sender, RoutedEventArgs e)
{
obj.Name = "changed";
}
}
public class Employee : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string _name;
public string Name
{
set
{
this._name = value;
OnPropertyChanged(Name);
}
get { return this._name; }
}
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
}
最佳答案
OnPropertyChanged(Name);
应该是:
OnPropertyChanged("Name");
否则,如果名称设置为“Kent”,您将引发一个属性更改事件,表明“Kent”属性已更改,而这显然不存在。
至于UpdateSourceTrigger
,这只适用于源。您绑定(bind)的属性是目标,而不是源。而且 TextBlock
更新其源代码是没有意义的,因为用户无法修改 TextBlock
文本。另一方面,TextBox
是有意义的。在这种情况下,UpdateSourceTrigger
确定将 TextBox
中的文本推回到源属性的点(例如,当用户键入每个字符时,或者当他们离开时)来自文本框
)。
关于wpf - "UpdateSourceTrigger"属性的概念,如何在WPF中使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4426837/