是否需要INotifyPropertyChanged来绑定ObservableCollection?

Stu*_*urm 0 c# wpf binding observablecollection inotifypropertychanged

当我绑定时,请说a Label到a string,我这样定义字符串:

private string _lbl;
public string Lbl
    {
     get
     {
          return = _lbl;
     }
      set
     {
         _lbl=value;
          OnPropertyChanged("Lbl");
     }
}
Run Code Online (Sandbox Code Playgroud)

随着INotifyPropertyChanged在我的类中实现接口.

我应该以同样的方式定义一个ObservableCollection或者我可以这样离开吗?

public ObservableCollection<File> myFiles {get; set;}

Fed*_*gui 5

作为一般规则,我倾向于像这样定义ObservableCollections:

    private ObservableCollection<Item> _items;
    public ObservableCollection<Item> Items
    {
        get { return _items ?? (_items = new ObservableCollection<Item>()); }
    }
Run Code Online (Sandbox Code Playgroud)

这称为"延迟初始化",其中ObservableCollection仅在首次访问时进行实例化.

这是确保您的收藏永远不会无效的好方法

请注意,它没有setter,因为ObservableCollection不是您通常分配给的东西.相反,如果要完全替换项目,请执行以下操作:

Items.Clear();
//... Add all the new items
Run Code Online (Sandbox Code Playgroud)

这避免了WPF必须重新绑定所有CollectionChanged事件和内容,以便监听和响应从集合中添加/删除的项目.永远只有1个集合的实例.无论你放置什么物品,收藏品都保持不变.

这不应与PropertyChange集合的ITEMS内的通知混淆.WPF单独处理这些概念,因为ITEMS会通知属性更改,但Collection本身会通知Collection更改(添加或删除项).