如何根据一个 属性 的变化更新其他依赖 属性
How to update other dependent property on change of one property
假设在 C# WPF 中 class 我有这样的东西:
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()
和在Age的setter中使用UpdateDOB()
之类的方法之外,还有其他方法可以自动更新"dependent" 属性以及依赖属性(由 INPC 负责)?
is there any other method that would automatically update the "dependent" properties along with the dependency properties (which INPC takes care of)?
这里没有 "automatic" 或魔法。您需要为要在视图中刷新的数据绑定 属性 设置支持字段并引发 PropertyChanged 事件。
只要确保您不会陷入从 DOB
属性 设置 Age
属性 的无限循环中,反之亦然。
您可以在 DOB
属性 的 setter 中设置 _age
支持字段,反之亦然,例如:
private DateTime _DOB;
public DateTime DOB
{
get
{
return _DOB;
}
set
{
if (_DOB != value)
{
_DOB = value;
RaisePropertyChanged();
_age = DateTime.Now.Year - _DOB.Year;
RaisePropertyChanged("Age");
}
}
}
假设在 C# WPF 中 class 我有这样的东西:
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()
和在Age的setter中使用UpdateDOB()
之类的方法之外,还有其他方法可以自动更新"dependent" 属性以及依赖属性(由 INPC 负责)?
is there any other method that would automatically update the "dependent" properties along with the dependency properties (which INPC takes care of)?
这里没有 "automatic" 或魔法。您需要为要在视图中刷新的数据绑定 属性 设置支持字段并引发 PropertyChanged 事件。
只要确保您不会陷入从 DOB
属性 设置 Age
属性 的无限循环中,反之亦然。
您可以在 DOB
属性 的 setter 中设置 _age
支持字段,反之亦然,例如:
private DateTime _DOB;
public DateTime DOB
{
get
{
return _DOB;
}
set
{
if (_DOB != value)
{
_DOB = value;
RaisePropertyChanged();
_age = DateTime.Now.Year - _DOB.Year;
RaisePropertyChanged("Age");
}
}
}