我覺得INotifyPropertyChanged
通常是約屬性值更新基於推送的通知的權利機制。
備選:
但是,它不是實現這一目標的唯一可能的機制。例如,Windows窗體也支持每個屬性單獨的…Changed
事件;即如果您擁有名爲Foo
的房產,則可能會在Foo
的設置人員中觸發相關聯的FooChanged
事件。
具有單獨的…Changed
事件具有特定於某個特定屬性的優勢,因此不需要觀察者/訂閱者過濾掉他們不感興趣的屬性的通知。另一方面,您的(數據)一旦您必須聲明50個額外的…Changed
事件,對象可能開始感覺「體積龐大」。
有關實現INotifyPropertyChanged
一些注意事項:
如果你厭倦了重新寫一遍又一遍相同的樣板代碼...:
public T SomeProperty
{
get { … }
set
{
if (someProperty != value)
{
someProperty = value;
NotifyPropertyChanged("SomeProperty");
}
}
}
private T someProperty;
,那麼你可能想考慮一個AOP框架(如PostSharp)。我記得CodePlex或Google Code上有一個庫,可以爲你自動執行INotifyPropertyChanged
(或重寫CIL字節碼);不幸的是我不記得圖書館的名字。
還有其他相關接口INotifyPropertyChanging
,INotifyListChanged
等您也許也想看看這些。
只是出於好奇:爲什麼執行一個getter更改的調用? – WaltiD
感謝您指出,並不意味着包括這一點。我已經更新了這個問題。 – mservidio