2014-04-02 19 views
1

我有一個類實現INotifyPropertyChanged。它有兩個屬性,其值彼此相關,例如,一個人的名字和姓氏。如果一個屬性更新,另一個屬性也需要更新。爲了傳達這一點,我已經將setter設置爲private,並添加了一個公共方法來同時更改這兩個屬性。INotifyPropertyChanged和一致性 - 什麼時候提出PropertyChanged?

我的問題是,如果有什麼規則或慣例來引發PropertyChanged事件?我想延遲提升這兩個屬性的事件,直到狀態完全更新並且我的對象狀態保持一致。但是,我不知道這是否會令人驚訝,並因此爲我的代碼的用戶造成麻煩,或者可能會在某處混淆某些庫代碼。

更新

再看看documentation揭示了以下內容:

PropertyChanged事件可以指示對象所有的屬性都用null或作爲的String.Empty屬性名稱更改在PropertyChangedEventArgs中。

這可能會解決我的問題,但如果對象上有很多屬性,它似乎不是一個通用的解決方案。

但是,我的問題仍然有效:我們是否立即提出PropertyChanged,或者在某些情況下是否可以稍等一下。

+0

你只要記住'PropertyChanged'不需要在setters中引發。他們可以從需要的地方升起。我認爲很明顯,你應該在該公共方法的最後提出兩個屬性的事件。 –

回答

0

當對象處於一致狀態時,應該提高PropertyChanged事件。如果更新兩個屬性,則應在兩個屬性更新後提升事件。 「等待一小會兒」並沒有什麼意義 - 你是否打算使用一個計時器來等待一段時間(比如100毫秒)?

無論取決於您的財產更改通知希望看到一致的對象。例如:

public void SetFullName(String fullName) { 
    // Naïve implementation. 
    var names = fullName.Split(new[] { ' ' }, 2); 
    FirstName = names[0]; 
    LastName = names[1]; 
    OnPropertyChanged("FirstName"); 
    OnPropertyChanged("LastName"); 
} 
+0

呵呵,通過「等一下」我當然意味着設置這兩個屬性並且只是在事後才提出事件,就像你所建議的那樣。感謝您的回答。 – kicsit

相關問題