将可重用的INotifyPropertyChanged添加到usercontrol

时间:2017-05-24 10:19:00

标签: c# winforms inheritance user-controls inotifypropertychanged

我在新应用程序中实现了很多用户控件,因为我希望usercontrols数据值可绑定,所以我想实现INotifyPropertyChanged接口。 接口的实现非常简单,但是必须在每个用户控件中实现相同的代码是很烦人的。 有没有人知道一个模式添加INotifyPropertyChanged的实现而不必使用继承? (我不能使用继承,因为自定义用户控件继承自UserControl)

解决此问题的一种方法是创建一个继承usercontrol并实现INotifyPropertyChanged接口的BindableUserControlBase。这个问题是,如果我的Bindable基类是userControl,那么我的所有Bindable类都必须是用户控件,否则我必须实现至少2个BindableBase类

我想了几秒钟,也许我可以用扩展方法做到这一点,但我无法弄清楚如何实现它。

对解决方案的任何建议?

这是我对INotifyPropertyChanged的实现

class BindableBase : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        protected void NotifyChanged(string propertyName)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
        public virtual void Set<T>(ref T storage, T Value, [CallerMemberName]string propertyName = null)
        {
            if (storage.Equals(Value) == false)
            {
                storage = Value;
                NotifyChanged(propertyName);
            }
        }
    }

0 个答案:

没有答案