我在新应用程序中实现了很多用户控件,因为我希望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);
}
}
}