检测属性变化

时间:2012-08-19 07:28:28

标签: c#

有没有一种方法可以检测属性值是否已更改但是在初始化对象时没有?

public string Foo
{
    set
    {
        // Register property has changed
        // but not on initialization
    }
}

2 个答案:

答案 0 :(得分:2)

如果您有一个支持字段,那么您可以在初始化时设置字段,然后设置属性。

private string foo;

public Bar()
{
    foo = "default"; // initialize without calling setter
}

public string Foo
{
    set
    {
        foo = value;
        // setter registers that property has changed
    }
}

答案 1 :(得分:2)

你可以这样做:

public class Bar
{
    private bool _initializing;

    private string _foo;
    public string Foo
    {
        set
        {
            _foo = value;
            if(!_initializing)
                NotifyOnPropertyChange();
        }
    }

    public Bar()
    {
        _initializing = true;
        Foo = "bar";
        _initializing = false;
    }
}

或者只是跳过_initializing部分并直接设置_foo而不是使用setter。