2011-01-13 17 views
2

所以我有一個項目,建立這樣爲類/結構的所有成員提高INotifyPropertyChanged?

Class Dataclass 
{ 
    var data 
    var data; 
    var data; 
} 

class DataViewModel 
{ 
    private Dataclass thing; 

    public string thingPropertyName = "thing"; 
    public Dataclass Thing 
    { 
    get { return thing; } 
    set { thing = value; RaisedPropertyChanged(thingPropertyName);} 
    } 
} 

因此,這裏是我的問題:如果我綁定到通過我的模型視圖類的事領域的子屬性,綁定不如有的更新只有整個對象發生了變化,我相信這是有意的。

如何解決此問題,以便如果我對包含的Dataclass的成員執行任何操作,我的綁定更新是否正確?

我會看着是在子類中的每一個元素包裝成父類的屬性,像這樣的第一件事:

public var Data 
{ 
    get { return thing.Data; } 
    set { thing.Data = value; RaisePropertyChanged(DataProperyName);} 
} 

這工作,但我仍然有一個問題,當子類對象被初始化。我能看到的唯一解決方案是在初始化類時爲每個元素手動調用RaisedPropertyName()。這似乎不是最佳的方式來做到這一點。我希望能有更好的方法。謝謝。

+0

尼斯頭像(提醒我別人的):) –

回答

3

如果您綁定到DataClass的屬性,並希望刷新綁定(這最終是使用綁定的目標),那麼這意味着您的DataClass必須實現INotifyPropertyChanged(其目的正是如此)。

如果你不想讓DataClass實現INotifyPropertyChanged,對於「圖層」的原因(例如:你不希望你的Data類實現與Views相關的問題),那麼你的DataViewModel必須作爲一個pass-through每個屬性,你需要。這是您提出的第二個解決方案。

4

在大多數情況下,調用RaisePropertyChanged(null)(假設這最終會調用適當的INotifyPropertyChanged事件委託,並在args結構中使用null作爲屬性名稱參數)會告訴所有綁定的偵聽器刷新。

+0

謝謝你,我不知道INotifyPropertyChanged會像這樣工作。 – Brandorf

+0

@Brandorf,不能保證,因爲不是所有的聽衆都會正確地解釋null。它肯定與WPF上下文中的DependencyProperty綁定一起工作,但其他客戶端可能會訂閱NotifyPropertyChanged並且不能正確處理null。 –