如何在更改一个属性时更新其他依赖属性

时间:2017-03-14 21:56:34

标签: c# wpf properties inotifypropertychanged

假设在C#WPF类中我有这样的东西:

class test: INotifyPropertyChanged
{
    private datetime _DOB
    public datetime DOB 
    {
        get
        {
            return _DOB;
        }
        set
        {
            if (_DOB != value)
            {
                _DOB = value;
                RaisePropertyChanged();
            }
        }
    }

    private int _age
    public int Age 
    {
        get
        {
            return _age;
        }
        set
        {
            if (_age != value)
            {
                _age = value;
                RaisePropertyChanged();
            }
        }
    }
....

}

现在,让我们假设用户可以放入任何属性。他们可以输入他们的DOB或他们的年龄,因此使其中一个计算属性不起作用。

除了在DOB的setter中使用像UpdateAge()这样的方法,在Age的setter中使用UpdateDOB()之外,还有其他任何方法可以自动更新“依赖”属性以及依赖属性( INPC负责哪个?)

1 个答案:

答案 0 :(得分:1)

  

有没有其他方法可以自动更新“依赖”属性以及依赖属性(INPC负责)?

这里没有“自动”或魔法。您需要设置支持字段并为要在视图中刷新的数据绑定属性引发PropertyChanged事件。

请确保您不会在无限循环中结束,您可以在Age属性中设置DOB属性,反之亦然。

您可以在age属性的setter中设置_ DOB支持字段,反之亦然,例如:

private DateTime _DOB;
public DateTime DOB
{
    get
    {
        return _DOB;
    }
    set
    {
        if (_DOB != value)
        {
            _DOB = value;
            RaisePropertyChanged();

            _age = DateTime.Now.Year - _DOB.Year;
            RaisePropertyChanged("Age");
        }
    }
}