2012-01-10 139 views
0

會發生什麼我有一個ObservableCollection財產也該物業當我reinstance一個的ObservableCollection

public ListCollectionView ListView 
{ 
    get 
    { 
     return (ListCollectionView)(CollectionViewSource.GetDefaultView(List)); 
    } 
} 

隨着列表作爲的ObservableCollection

在WPF我有一個綁定到ListView屬性ListView控件。

因此,據我瞭解,如果我在代碼中更改ObservableCollection,它應該反映在視圖中。

但如果我只是做List = new ObservableCollection<SomeType>(someElements)

的列表中查看完全不更新。無論如何,如果我正在使用MVVM,它會在代碼後面刷新它?

回答

2

添加另一個變更通知的觀點:

public ObservableCollection<...> List 
{ 
    get {...} 
    set 
    { 
     if (list != value) 
     { 
      list = value; 
      OnPropertyChanged("List"); 
      OnPropertyChanged("ListView"); 
     } 
    } 
} 
+0

我認爲我的大腦昨天出現故障或某事。這種明顯的解決方案。我還注意到ListCollectionView具有刷新功能,不知道它是如何工作的。 – 2012-01-11 11:54:48

1

您應該提高PropertyChanged事件ListView

1

在這種情況下,你將不得不實施INotifyPropertyChanged並觸發PropertyChanged事件爲ListView財產強制框架以更新綁定。然而,通常情況下,您希望避免重新實例化,並且始終更新相同的ObservableCollection

1

你需要提出一個屬性更改事件的列表本身,要麼做一個DependancyProperty或使用INotifyPropertyChanged的屬性

1

控件綁定到ListView財產,監聽IPropertyChanged事件,以便它可以如果自行更新底層視圖發生變化。但是,當您更改底層集合時,它無法神奇地確定視圖已更改。

在您更改List的值之後,直接解決方案是在ListView屬性中觸發PropertyChanged

相關問題