我有一个绑定到Employees的observableCollection的数据网格 允许用户通过双击datagridRow进行行编辑。 绑定有问题的属性时,我也使用UpdateSourceTrigger。
当我的用户按下保存按钮时,我的MVVM中会触发saveCommand,我想创建一个仅包含我已修改属性的员工的列表。
我的所有ViewModel都实现了INotifyPropertyChanged。
尽管google上有很多链接,但我似乎无法找到一个示例,它会引导您完成或解释如何跟踪observablecollection中已更改的项目。
你能帮忙吗?
答案 0 :(得分:2)
为您的Employee创建基类,例如EntityBase和描述其状态的枚举:
public enum EntityState
{
NotChanged,
Changed,
Added,
Deleted
}
public abstract class EntityBase : INotifyPropertyChanging, INotifyPropertyChanged
{
public event PropertyChangingEventHandler PropertyChanging;
public event PropertyChangedEventHandler PropertyChanged;
private EntityState state = EntityState.NotChanged;
public EntityState State
{
get { return state; }
set { state = value; }
}
public EntityBase()
{
state = EntityState.NotChanged;
}
protected virtual void SendPropertyChanging(string propertyName)
{
if ((this.PropertyChanging != null))
{
this.PropertyChanging(this, new PropertyChangingEventArgs(propertyName));
}
}
protected virtual void SendPropertyChanged(string propertyName)
{
if ((this.PropertyChanged != null))
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
当您的某个收集人员更改时 - 使用EntityState.Changed标记它,然后您可以只从集合中请求更改的实体并根据需要处理它们。
答案 1 :(得分:0)
我不知道有任何内置方法可以做你想做的事。
我过去所做的是在集合中的对象上实现一个布尔的IsDirty属性。然后在您引发PropertyChanged时将IsDirty属性设置为true。