2011-06-21 185 views
2

我正在使用DataGrid的ItemsSource作爲數據綁定的ObservableCollection。集合包含複雜類型的對象。這種類型的屬性之一是字符串列表。包含對象的ObservableCollection包含列表

只是現在我看到,當我從代碼更新此List屬性在UI中沒有任何更改(主綁定工作正常)。所以,我的問題是:這是一個預期的行爲?也許我不應該使用List作爲類型的一部分,還可以使用ObservableCollection?

更新

模式設置爲單向。

+0

Jehof是正確的,但是,您可能還需要使用HierarchicalDataTemplate(取決於視圖)。 –

+0

類型應將ICollection或其他接口公開爲屬性,後臺字段應實現INotifyCollectionChanged,如ObservableCollection。 –

回答

0

是的,它是預期的行爲。可觀察集合只會通知其內容的更改 - 即添加,刪除,重新排序。

您正在看的是對observablecollection中某個元素的更改 - 如果要查看對您放入的類的更改,則元素必須實現INotifyPropertyChanged。

因此,目前:如果你的列表屬性複雜的對象發生變化,你不會看到它,但是如果你改變它也不是一個可觀察的集合,你可以在一個子項目控件中看到對該集合的更改,比如組合框 - 但如果將集合對象更改爲另一個集合對象,則不應該如此 - 因此,如果您未實現INotifyPropertyChanged,則應在應用綁定之前設置集合屬性。

+0

這就是我在一小時前所做的 - ObservableCollection而不是List + INotifyPropertyObject在整個結構上(我對此感到羞恥,我應該早點想到它)。我標記你的答案是解決我的問題。 – 26071986

0

當你updateding列表我只好打電話INotifyPropertyChange其他明智的UI不會得到更新列表結果..

INotifyPropertyChange的是,這裏的一些變化發生在項目源,以便更新它的指示。

+0

沒有幫助,因爲與舊值的比較將是相同的。此外,外部集合沒有改變 - 無需更新其視圖(性能)內部集合是必須實現的** INotifyCollectionChanged **。 –

+0

@Dammy:INotifyCollectionChanged毫無疑問將工作..但我與財產使用INotifyCollectionChanged綁定它適用於我。我知道我告訴的方式.. – Syeda