Rem*_*tec 20 c# wpf inotifypropertychanged wpfdatagrid
我有一个绑定的数据网格ObservableCollection<Product>.更新网格后,这会自动更新集合中的Product对象.
我现在要做的是在集合中的任何对象被更新时触发某种甚至触发 - 或者 - 某种类型的绑定到集合,如果任何Product已经更新,它将返回true/false depedant.
总体目标是在我的主窗口上有一个保存按钮,如果没有对我的集合进行任何更改则禁用该按钮,如果已进行了更改,则启用该按钮.
我已阅读INotifyPropertyChange但我不知道如何使用它来监控整个集合的变化.
另外,如果我在Product类上实现此接口,我不会看到我的UI如何监视集合中的每个产品 - 或者它可以吗?
cho*_*dze 15
INotifyPropertyChanged在您的Product班级中实施每个属性的通知.INotifyPropertyChanged在您的viewmodel中实现.IsDirty到ViewModel(通知通过INotifyPropertyChanged.在您的viewmodel中,订阅 CollectionChanged
public YourViewModel()
{
...
YourCollection.CollectionChanged += YourCollection_CollectionChanged;
...
}
private void YourCollection_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs args)
{
if (args.OldItems != null)
foreach(var oldItem in args.OldItems)
oldItem.PropertyChanged -= YourItem_PropertyChanged;
if (args.NewItems != null)
foreach(var newItem in args.NewItems)
newItem.PropertyChanged += YourItem_PropertyChanged;
}
private void Youritem_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs args)
{
IsDirty = true;
}
Run Code Online (Sandbox Code Playgroud)现在您可以绑定到IsDirtyviewmodel的属性,例如,您可以将Button.IsEnabled属性直接绑定到它.
逻辑需要放入您的模型(产品类)中。一种干净的方法是IsDirty在模型中公开属性(由字段支持)。
并且您的 ViewModel 将具有一个命令绑定来CanSave检查内部集合,并且如果集合中的任何项目返回 true IsDirty=true。
| 归档时间: |
|
| 查看次数: |
19802 次 |
| 最近记录: |