[英]When should a “property changed” event be fired?
當財產的實際價值沒有變化時觸發“財產已更改”事件是否合適?
public int SomeProperty
{
get { return this.mSomeProperty; }
set
{
this.mSomeProperty = value;
OnPropertyChanged(new PropertyChangedEventArgs("SomeProperty"));
}
}
即使新值與舊值相同,這也會觸發事件。 這是不好的做法嗎?
除非值發生變化,否則最佳做法不是拋出事件。
在你的情況下,屬性只是一個'int',所以它只是一個簡單的相等檢查。 如果您的財產本身就是一個對象,則需要考慮更多案例
您再次設置相同的實例 - 沒有屬性更改
您使用不同的值設置不同的實例 - 拋出屬性更改
您設置了一個不同的但是“相等”的實例(即,兩個不同的對象具有相同的值集,並且從您的應用程序的角度來看可以被認為是等效的) - 拋出屬性更改。
最后一個會受到一些爭論......當所有屬性都相同時,屬性是否真的發生了變化? 如果有人使用該屬性更改來訂閱子類中的更改,則需要它知道取消訂閱舊類並訂閱新類。 因此,我在宣布改變方面犯了錯誤。
不,除非基礎值實際發生變化,否則不要觸發事件。
通常,您對Setter進行編碼,使得它甚至不會嘗試修改基礎值,除非它實際上是不同的。
如果你有一個名為PropertySetterAccessed
的事件,那么當值沒有改變時觸發它是合適的。 但是,您的事件稱為PropertyChanged
,因此只有在實際發生時才會觸發它。 如果您的活動/方法/課程等沒有做“他們在錫上說的話”,那么您正在為某人制造維護噩夢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.