如何使用WPF在MVVM模式中作为集合的属性实现IsDirty机制?
IsDirty是一个标志,指示viewmodel中的数据是否已更改,并用于保存操作。
如何传播IsDirty?
答案 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继承。