2009-07-07 55 views
2

當屬性的實際值沒有改變時,是否適合觸發「屬性更改」事件?何時應該發起「屬性更改」事件?

public int SomeProperty 
{ 
    get { return this.mSomeProperty; } 
    set 
    { 
     this.mSomeProperty = value; 
     OnPropertyChanged(new PropertyChangedEventArgs("SomeProperty")); 
    } 
} 

即使新值與舊值相同,也會觸發事件。這是不好的做法嗎?

+0

爲什麼你有回報;在你的二傳手? – 2009-07-07 18:15:36

+0

我已經刪除了它 - 工作中的編碼標準需要在每個函數結束時返回一個聲明。 – 2009-07-07 22:10:08

回答

5

最佳做法是不要拋出事件,除非值更改。

在你的情況下,屬性只是一個'int',所以它只是一個簡單的相等性檢查。如果你的財產是在它自己的權利的對象,還有更多的情況要考慮

  1. 你設置一次相同的實例 - 無屬性更改

  2. 您可以設置不同的值不同的實例 - 投擲財產變更

  3. 您設置了一個不同但等價的實例(即,兩個不同的對象具有相同的一組值並且可以視爲等同於應用程序的角度) - 拋出屬性更改。

最後一個是受到一些辯論......當屬性的所有屬性都相同時,屬性是否真的發生了變化?如果某人正在使用該屬性更改來訂閱子類中的更改,他們將需要知道從舊類中取消訂閱並訂閱新類。因此,我在宣佈變革方面犯了錯誤。

4

不,不要觸發事件,除非基礎值實際發生了變化。

通常,你編寫Setter的時候,它甚至不會試圖修改底層的值,除非它實際上是不同的。

4

如果您有一個名爲PropertySetterAccessed的事件,那麼在數值沒有變化時將其觸發是適當的。但是,您的活動名稱爲PropertyChanged,因此只有在實際發生時才能觸發。如果你的事件/方法/課程等沒有做「他們在罐子上說的話」,你正在爲某人制造維護噩夢。

相關問題