接口扩展方法

时间:2014-04-15 05:29:05

标签: c# wpf

我目前正在使用WPF并实现派生INotifyPropertyChanged的模型相关类。我发现声明一些辅助方法非常有用。所以我想自动添加这些辅助方法:

public static class INotifyPropertyChangedHelper
{
    static void notifyPropertyChanged(this INotifyPropertyChanged propertyChanged, string PropertyName = "")
    {
        // errors here
        propertyChanged.PropertyChanged(propertyChanged, new PropertyChangedEventArgs(PropertyName));
    }
    static bool setField<T>(this INotifyPropertyChanged propertyChanged, ref T field, T value, [CallerMemberName]string propertyName = "")
    {
        if (EqualityComparer<T>.Default.Equals(field, value)) return false;
        field = value;
        propertyChanged.notifyPropertyChanged(propertyName);
        return true;
    }
}

给我一​​个编译错误

  

事件'System.ComponentModel.INotifyPropertyChanged.PropertyChanged'只能'       出现在+ =或 - =“的左侧,因为PropertyChanged是一个事件。

有没有一种优雅的方法来解决这个问题?

1 个答案:

答案 0 :(得分:0)

这样做没有简单的技巧,扩展方法是编译器识别的静态方法,它们不会成为类本身的一部分。由于+ =和 - = on事件只能通过定义事件的类来访问,因此扩展方法无法帮助您。

我猜你是想破解一个已知的问题: Implementing INotifyPropertyChanged - does a better way exist?