WPF 绑定时List,ObservableCollection和CollectionView的区别

WPF亮点之一就是可以使用双向绑定,实现前后端的分离。在绑定的时候,前端Xaml文件需要绑定ViewModel中的字段。
绑定字段可以分几种类型

  • T 属性,在属性的Set方法中需要调用PropertyChanged方法,用于通知界面
  • List<T> 属性,与UI中含有Items的控件绑定
  • ObservableCollection<T> 属性,与UI中含有Items的控件绑定,与List<T> 不同的是,ObserverableCollection<T> 在该集合中添加一个T,该属性会通知界面。
  • CollectionView属性 实现的功能是可以对List<T> 或者 ObservableCollection<T>进行筛选,移动CurrentItem。
  • 关键代码如下:

     public class MainVM : INotifyPropertyChanged
            public MainVM()
                this.Search = "kun";
            //public List<User> Users { get; set; }
            public ObservableCollection<User> Users { get; set; }
            public ICollectionView _CollectionView
                    return CollectionViewSource.GetDefaultView(Users);
            private string _search;
            public event PropertyChangedEventHandler PropertyChanged;
            public string Search
                    return _search;
                    _search = value;
                    if (PropertyChanged != null)
                        PropertyChanged(this, new PropertyChangedEventArgs("Search"));
                    _CollectionView?.Refresh();
    

    该Demo中还使用了Selector.IsSynchronizedWithCurrentItem属性,当该属性为True时,当selectedItem发生变化,会同步变化CurrentItem.当一个属性被多个控件绑定时会用到。比如该Demo中MainVM 中的Users被Listbox和ContentControl绑定,其中ContentControl绑定的是该属性的currentItem。

    关键代码如下