实现 INotifyPropertyChanged
INotifyPropertyChanged
是绑定源(即 DataContext)使用的接口,以使用户界面或其他组件知道属性已更改。WPF 会在看到 PropertyChanged
事件时自动为你更新 UI。希望在所有视图模型都可以继承的基类上实现此接口。
在 C#6 中,这就是你所需要的:
public abstract class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged([CallerMemberName] string name = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
}
这允许你以两种不同的方式调用 NotifyPropertyChanged
:
NotifyPropertyChanged()
,它将为调用它的 setter 引发事件,这要归功于 CallerMemberName 属性。NotifyPropertyChanged(nameof(SomeOtherProperty))
,它将为 SomeOtherProperty 举起活动。
对于使用 C#5.0 的 .NET 4.5 及更高版本,可以使用它:
public abstract class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged([CallerMemberName] string name = null)
{
var handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
}
在 4.5 之前的 .NET 版本中,你必须将属性名称解析为字符串常量或使用表达式的解决方案 。
注意: 可以绑定到没有实现 INotifyPropertyChanged
的“普通旧 C#对象”(POCO)的属性,并观察绑定比预期更好地工作。这是 .NET 中的一个隐藏功能,应该可以避免。特别是当绑定的 Mode
不是 OneTime
时会导致内存泄漏(见这里 )。