基本上我想做这样的事情:
public static void OnPropertyChanged(this INotifyPropertyChanged changedObject, string propertyName)
{
var handler = changedObject.PropertyChanged;
if (handler != null)
{
var e = new PropertyChangedEventArgs(propertyName);
handler(changedObject, e);
}
}
,它给出了“System.ComponentModel.INotifyPropertyChanged.PropertyChanged只能在+ =或 - =”的左侧使用
我的意思是我可以通过这样做解决它:
public static void RaisePropertyChanged(this PropertyChangedEventHandler handler, object sender, string propertyName)
{
if (handler != null)
{
var e = new PropertyChangedEventArgs(propertyName);
handler(sender, e);
}
}
但调用代码看起来不太好:
PropertyChanged.RaisePropertyChanged(this, "Name");
vs this:
this.OnPropertyChanged("Name");
没什么大不了的,但能够将它称为实例方法就好了。
答案 0 :(得分:1)
它也违反了准则:On *方法通常是基于INSIDE实现实例的东西来做事情。通常,这些方法是虚拟的,因此您可以在派生类中覆盖它们。因此,在外部使用On *方法毫无意义。如果你想在没有可怕的空值测试的情况下引发事件,你确实应该使用RaiseEvent()扩展方法。我写了很多这些,都有重载,所以你可以只有RaiseEvent(...),你不必在方法中包含事件的名称。例如,在您使用常规EventHandler类型的情况下,这尤其容易,因此您可以对更多事件使用相同的扩展方法。