C# 如何在一个属性发生更改时更新其他从属属性
假设在一个C#WPF类中,我有如下内容: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) {
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)
条件会解决这个问题。我错了吗?假设你对日期的计算是正确的,你可能是对的:)无论如何,记住这一点是件好事,你显然已经做了。谢谢。我希望有某种方式来表达一个属性对其他属性的依赖性,这样更改一个属性的值就会自动触发对其他属性的重新评估。