【发布时间】:2012-11-06 04:25:36
【问题描述】:
到目前为止,我的模型实现了INotifyPropertyChanged,并且每个属性都会引发此事件。
几乎所有 ViewModel 都通过 PropertyChangedEventHandler 监听这些变化。
问题在于,模型中的每次更改都会调用此处理程序,即使属性更改对视图并不重要。
一种选择是检查哪个属性引发了事件。但是,我不喜欢测试 PropertyName 字符串的想法。它需要对属性名称进行硬编码,我已经在模型中使用 PropertyChanged.Notify(()=> PropertyName) 之类的调用避免了这种情况@
我看到的第二个选项是为我的所有属性实现单个事件:
public event PropertyChangedEventHandler LayerChanged;
public event PropertyChangedEventHandler FieldChanged;
public event PropertyChangedEventHandler LinkDictionaryChanged;
....
最佳做法是什么?我更喜欢第二种选择。
编辑:我尝试更具体
我的模型类是这样工作的:
public bool IsFeatureLayer
{
get { return _isFeatureLayer; }
set { PropertyChanged.ChangeAndNotify(ref _isFeatureLayer, value, () => IsFeatureLayer);}
}
或者
PropertyChanged.Notify(() => LinkDictionary);
所以问题不在于如何使通知调用更安全,因为我已经使用扩展方法来做到这一点,而无需属性的字符串名称。
问题是如何在不使用字符串的情况下找出谁调用了事件。
void _MCDAExtensionPropertyChanged(object sender, PropertyChangedEventArgs e)
{
if(e.PropertyName.Equals("LinkDictionary"){
//event handling
}
}
这完全不安全,因为我的模型中的属性名称可以更改,我必须在不同的地方修复它。
【问题讨论】:
标签: c# wpf properties event-handling inotifypropertychanged