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;}
作为一般规则,我倾向于像这样定义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更改(添加或删除项).
| 归档时间: |
|
| 查看次数: |
789 次 |
| 最近记录: |