C# 如何在一个属性发生更改时更新其他从属属性

C# 如何在一个属性发生更改时更新其他从属属性,c#,wpf,properties,inotifypropertychanged,C#,Wpf,Properties,Inotifypropertychanged,假设在一个C#WPF类中,我有如下内容: class test: INotifyPropertyChanged { private datetime _DOB public datetime DOB { get { return _DOB; } set { if (_DOB != value) {

假设在一个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的setter中使用类似于
UpdateAge()
的方法和在年龄setter中使用类似于
updatedb()
的方法外,是否还有其他方法可以自动更新“依赖”属性和依赖属性(INPC负责)

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

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


只需确保不会出现无限循环,即从
DOB
属性设置
Age
属性,反之亦然

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

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

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

在计算属性的情况下,这当然会有所帮助,但在我的情况下就不会了。“只要确保不会在一个无限循环中结束,从DOB属性设置Age属性,反之亦然。”我希望
如果(_DOB!=value)
条件会解决这个问题。我错了吗?假设你对日期的计算是正确的,你可能是对的:)无论如何,记住这一点是件好事,你显然已经做了。谢谢。我希望有某种方式来表达一个属性对其他属性的依赖性,这样更改一个属性的值就会自动触发对其他属性的重新评估。