實現 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
時會導致記憶體洩漏(見這裡 )。