仅跟踪observableCollection中已更改的项目。这可能吗?

时间:2010-07-12 15:38:04

标签: wpf

我有一个绑定到Employees的observableCollection的数据网格 允许用户通过双击datagridRow进行行编辑。 绑定有问题的属性时,我也使用UpdateSourceTrigger。

当我的用户按下保存按钮时,我的MVVM中会触发saveCommand,我想创建一个仅包含我已修改属性的员工的列表。

我的所有ViewModel都实现了INotifyPropertyChanged。

尽管google上有很多链接,但我似乎无法找到一个示例,它会引导您完成或解释如何跟踪observablecollection中已更改的项目。

你能帮忙吗?

2 个答案:

答案 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。