将对象标记为已更改

时间:2018-08-16 12:21:08

标签: c# .net

可能有一个非常简单的解决方案,但是我的Google Foo无法使我:(

我有一个带有自动属性的普通旧对象。我想做的是,如果更改了任何属性,则更改属性上的一些标志。显然,可以通过像这样困扰所有的二传手来实现……

private bool _changed;
private string _foo;
public string Foo
{
    get => _foo;
    set { _foo = value; _changed = true;  }
}

但是出于明显的原因,这既麻烦又容易出错(这些对象具有数十个属性)。那么有什么方法可以通用吗?

干杯!

2 个答案:

答案 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;
    }


    }