重新安装ObservableCollection时会发生什么

时间:2012-01-10 16:45:21

标签: wpf listview observablecollection

我有一个ObservableCollection属性以及此属性

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

List是ObservableCollection

在WPF中,我有一个ListView控件绑定到ListView属性。

据我了解,如果我在代码中更改ObservableCollection,它应该反映在视图中。

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

怎么办?

视图中的列表根本不会更新。如果我正在做MVVM,那么无论如何都要在代码中刷新它吗?

5 个答案:

答案 0 :(得分:2)

为视图添加其他更改通知:

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

答案 1 :(得分:1)

您应该为PropertyChanged举起ListView个活动。

答案 2 :(得分:1)

在这种情况下,您必须实现INotifyPropertyChanged并触发PropertyChanged属性的ListView事件以强制框架更新绑定。但是,一般情况下,您希望避免重新实例化,并始终更新相同的ObservableCollection

答案 3 :(得分:1)

你需要为List本身引发一个属性更改事件,要么使该属性成为DependancyProperty,要么使用INotifyPropertyChanged

答案 4 :(得分:1)

控件绑定到ListView属性并侦听IPropertyChanged事件,以便在基础视图更改时它可以自行更新。但是,当您更改基础集合时,它无法神奇地确定视图已更改。

直接解决方案是在更改PropertyChanged的值后立即触发ListView属性的List