可能有一个非常简单的解决方案,但是我的Google Foo无法使我:(
我有一个带有自动属性的普通旧对象。我想做的是,如果更改了任何属性,则更改属性上的一些标志。显然,可以通过像这样困扰所有的二传手来实现……
private bool _changed;
private string _foo;
public string Foo
{
get => _foo;
set { _foo = value; _changed = true; }
}
但是出于明显的原因,这既麻烦又容易出错(这些对象具有数十个属性)。那么有什么方法可以通用吗?
干杯!
答案 0 :(得分:3)
没有内置解决方案。您可以为您的设置员实现一个功能,但仍然需要所有设置员正确调用此函数。
这是一个例子:
private bool _changed;
private void SetValue<T>(ref T field, T value)
{
if (!Equals(field, value))
{
field = value;
_changed = true;
}
}
private string _foo;
public string Foo
{
get => _foo;
set => SetValue(ref _foo, value);
}
答案 1 :(得分:-2)
让您的类扩展INotifyPropertyChanged接口。它需要一个
protected void OnPropertyChanged(PropertyChangedEventArgs e)
功能。
在propertyChange函数中粘贴_changed = true,它应该可以工作:)
Class X : INotifyPropertyChanged{
private bool _changed;
private string _foo;
public string Foo
{
get => _foo;
set { _foo = value; _changed = true; }
}
protected void OnPropertyChanged(string propertyName){
_changed = true;
}
}