如何使用WPF在MVVM模式中的集合属性上实现IsDirty?

时间:2013-10-21 20:35:36

标签: c# wpf mvvm observablecollection inotifypropertychanged

如何使用WPF在MVVM模式中作为集合的属性实现IsDirty机制?

IsDirty是一个标志,指示viewmodel中的数据是否已更改,并用于保存操作。

如何传播IsDirty?

1 个答案:

答案 0 :(得分:1)

您可以沿着这些行实现自定义集合......

 public class MyCollection<T>:ObservableCollection<T>, INotifyPropertyChanged 
    {
        // implementation goes here...
        //
        private bool _isDirty;
        public bool IsDirty
        {
            [DebuggerStepThrough]
            get { return _isDirty; }
            [DebuggerStepThrough]
            set
            {
                if (value != _isDirty)
                {
                    _isDirty = value;
                    OnPropertyChanged("IsDirty");
                }
            }
        }
        #region INotifyPropertyChanged Implementation
        public event PropertyChangedEventHandler PropertyChanged;
        protected virtual void OnPropertyChanged(string name)
        {
            var handler = System.Threading.Interlocked.CompareExchange(ref PropertyChanged, null, null);
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(name));
            }
        }
        #endregion
    }

并宣布你的收藏品......

MyCollection<string> SomeStrings = new MyCollection<string>();
SomeStrings.Add("hello world");
SomeStrings.IsDirty = true;

这种方法让您享受ObservableCollection的好处,同时允许您追加感兴趣的属性。如果你的Vm没有使用ObservableCollection,你可以使用相同的模式从List of T继承。