sea*_*717 2 c# wpf observablecollection
我有一个绑定到ObservableCollection<MyEntity>类型列表的WPF对话框.在对话框中,我希望只有在对ObservableCollection<MyEntity>列表进行更改时才启用"确定"按钮- 包括从列表中添加/删除项目以及修改列表中的各个项目.
为了从列表中添加/删除项目,很容易 - 我为CollectionChanged事件实现了一个处理程序.
我不知道怎么办是修改单个项目.比方说,MyEntity.Name ="New Value",MyEntity类需要实现哪些接口才能使其"可观察"?
MyEntity需要实现INotifyPropertyChanged,然后在发生属性更改时触发PropertyChanged事件.像这样:
public class MyEntity : INotifyPropertyChanged
{
public bool MyFlag
{
get { return _myFlag; }
set
{
_myFlag = value;
OnPropertyChanged("MyFlag");
}
}
protected void OnPropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
Run Code Online (Sandbox Code Playgroud)
解决这个问题的两种方法是:
在对象内部有一个事件监听器,然后在属性发生变化时设置一个IsDirty标志.然后OK按钮绑定到命令(检查ICommand接口的用法),并在命令的CanExecute方法中检查ObservableCollection中的任何对象是否已设置为脏.可以使用简单的LINQ语句完成此检查:myCollection.Any(x => x.IsDirty == true)
这个方法更笨重和臭...有一个外部对象侦听更改(通过在每个对象上订阅PropertyChanged事件),然后外部侦听器可以启用OK按钮(通过数据绑定或直接设置).
| 归档时间: |
|
| 查看次数: |
1015 次 |
| 最近记录: |