我正在使用一些使用INotifyPropertyChanged接口的CLR对象,并使用PropertyChanged函数在WPF绑定中进行更新。
漂亮的样板:
protected void RaisePropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
然后属性:
private double m_TotalWidgets = 0;
public double TotalWidgets
{
get { return m_TotalWidgets; }
set
{
m_TotalWidgets = value;
RaisePropertyChanged("TotalWidgets");
}
}
有更好的方法来更新派生值甚至整个类吗?
说我有一个计算值:
public double ScaledWidgets
{
get
{
return TotalWidgets * CONSTANT_FACTOR;
}
}
当TotalWidgets更新时,我必须触发ScaledWidget的PropertyChanged,例如:
set
{
m_TotalWidgets = value;
RaisePropertyChanged("TotalWidgets");
RaisePropertyChanged("ScaledWidgets");
}
有更好的方法吗?是否可能“使整个对象无效”,特别是如果有很多派生值?我认为发起100场PropertyChanged事件会有点蹩脚。
答案 0 :(得分:3)
您可以使用参数 string.empty 或 null 来引发PropertyChangedEvent。然后,对象的所有属性都“无效”。查看我的帖子here
答案 1 :(得分:0)
我不知道是否有更好的方法,但我可以提出两点建议:
为什么要写100个PropertyChanged事件?也许这不是必要的,问题出在其他地方。