gpt4 book ai didi

c# - WPF 为获取属性通知 PropertyChanged

转载 作者:行者123 更新时间:2023-11-30 12:28:25 24 4
gpt4 key购买 nike

我使用 CallerMemberName 实现了 INotifyPropertyChanged

public event PropertyChangedEventHandler PropertyChanged;

protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}

所以这可以在任何属性的 setter 中调用 - OnPropertyChanged(),它会在设置时通知属性更改事件。对于仅作为 setter/getter 的属性,情况并非如此。例如,

private DateTime _dob;
public DateTime DateOfBirth
{
get
{
return _dob;
}
private set
{
_dob = value;
OnPropertyChanged();
OnPropertyChanged("Age");
}
}

public int Age
{
get
{
return DateTime.Today.Year - _dob.Year;
}
}

OnPropertyChanged() 适用于 DateOfBirth,但要通知年龄已更改,我应该记得在 DateOfBirth 的 setter 中调用 OnPropertyChanged("Age") 。我觉得这会使代码随着时间的推移难以维护。如果新属性依赖于年龄,则还需要在 DateOfBirth 的 setter 中进行通知。有没有更好的方法可以在不调用 OnPropertyChanged("Age") 的情况下执行此操作?

最佳答案

只要您的依赖属性在同一个类中,您就可以使用 Poma 的方法,但如果依赖属性在不同的类中,则使用该方法会变得越来越困难。

在我看来,在概念上正确的做法是添加一个 PropertyChanged 监听器。

在这种情况下会是这样的

在构造函数中:

this.PropertyChanged += new PropertyChangedEventHandler(SubPropertyChanged);

外面:

private void SubPropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "DateOfBirth")
{
OnPropertyChanged("Age");
}
}

如果你在完全不同的地方有一个依赖属性,并且如果你不能再改变你的源类,这也适用。

关于c# - WPF 为获取属性通知 PropertyChanged,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21776439/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com