基类不实现INotifyPropertyChange;如何在派生类中实现它?

彼得

更新:对不起,我不清楚这个问题。我应该提到:

  1. 假设我无法更改Base,并且..

  2. Base中有许多属性。示例代码已简化。


这里有一个通过网络反序列化的(基)类的对象。

public class Base
{
   public string Name { get; set; }
}

现在,我希望将其属性绑定到WPF应用程序上,以便在派生类上实现INotifyPropertyChanged。

public class Derived : Base, INotifyPropertyChanged
{
  private string _derivedName;

  public string DerivedName { 
    get { return _derivedName; }
    set
    { 
      _derivedName = value;
      RaisePropertyChanged("DerivedName");
    }
  }

  public event PropertyChangedEventHandler PropertyChanged;

  protected virtual void RaisePropertyChanged(string propertyName)
  {
    PropertyChangedEventHandler handler = PropertyChanged;
    if (handler != null)
    {
      handler(this, new PropertyChangedEventArgs(propertyName));
    }
  }
}

现在我的问题是:更改Base.Name时如何引发属性更改事件?

我知道我可以删除继承并重新实现每个基本属性并引发事件,但是还有更好的方法吗?

加里普

更改您的代码,以便Base代替实现接口,并在设置Name时引发事件:

public class Base : INotifyPropertyChanged
{
   private string _name;
   public string Name { get
   {
       return _name;
   }
   set{
       if(PropertyChanged != null)
           PropertyChanged(this, new PropertyChangedEventArgs("Some arg"));
       _name = value;
   }
}

   public event PropertyChangedEventHandler PropertyChanged;
}

“ Derived”将继承Base的接口实现,因此只需将其从类声明中删除:

public class Derived : Base
{
  private string _derivedName;

  public string DerivedName { 
    get { return _derivedName; }
    set
    { 
      _derivedName = value;
      RaisePropertyChanged("DerivedName");
    }
  }

  protected virtual void RaisePropertyChanged(string propertyName)
  {
    PropertyChangedEventHandler handler = PropertyChanged;
    if (handler != null)
    {
      handler(this, new PropertyChangedEventArgs(propertyName));
    }
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从派生类中隐藏基类的实现细节

来自分类Dev

如何为派生类实现INotifyPropertyChanged?

来自分类Dev

如何为派生类实现INotifyPropertyChanged?

来自分类Dev

在派生类中实现IDisposable

来自分类Dev

如何访问子类派生类中实现的接口方法?

来自分类Dev

派生类会破坏基类的实现吗

来自分类Dev

如何在基类中定义一个静态接口,并确保该接口必须在派生类中实现?

来自分类Dev

在基类中声明的C#接口方法无需在派生类中再次实现

来自分类Dev

C#:在基类中定义方法实现,在派生类中定义属性

来自分类Dev

在基类中声明的C#接口方法无需在派生类中再次实现

来自分类Dev

C#:在基类中定义方法实现,在派生类中定义属性

来自分类Dev

Java-如何为基类和派生类实现方法克隆

来自分类Dev

在派生类中以不同方式实现基类枚举

来自分类Dev

防止在派生类C#中调用基类实现的接口方法

来自分类Dev

当基类实现抽象时,在派生类上指定实现接口

来自分类Dev

如何找出未实现的派生类的方法?

来自分类Dev

如何找出未实现的派生类的方法?

来自分类Dev

如何实现派生类并从Button调用它?

来自分类Dev

继承的方法无权访问派生类中的新实现

来自分类Dev

是否可以(部分)实现抽象方法,并且仍然需要派生类也可以实现它?

来自分类Dev

是否可以(部分)实现抽象方法,并且仍然需要派生类也可以实现它?

来自分类Dev

强制派生类实现接口

来自分类Dev

用模板实现派生类

来自分类Dev

派生类的通用相等实现

来自分类Dev

如何在没有CWinApp派生类的情况下实现MFC序列化?

来自分类Dev

如何从派生类中获取基类实例

来自分类Dev

如何从C ++中的基类访问派生类的属性?

来自分类Dev

如何在派生类中重写`toString`并使用基类中的私有实例变量?

来自分类Dev

如何在python中相同的重载派生类方法中调用基类方法?

Related 相关文章

  1. 1

    从派生类中隐藏基类的实现细节

  2. 2

    如何为派生类实现INotifyPropertyChanged?

  3. 3

    如何为派生类实现INotifyPropertyChanged?

  4. 4

    在派生类中实现IDisposable

  5. 5

    如何访问子类派生类中实现的接口方法?

  6. 6

    派生类会破坏基类的实现吗

  7. 7

    如何在基类中定义一个静态接口,并确保该接口必须在派生类中实现?

  8. 8

    在基类中声明的C#接口方法无需在派生类中再次实现

  9. 9

    C#:在基类中定义方法实现,在派生类中定义属性

  10. 10

    在基类中声明的C#接口方法无需在派生类中再次实现

  11. 11

    C#:在基类中定义方法实现,在派生类中定义属性

  12. 12

    Java-如何为基类和派生类实现方法克隆

  13. 13

    在派生类中以不同方式实现基类枚举

  14. 14

    防止在派生类C#中调用基类实现的接口方法

  15. 15

    当基类实现抽象时,在派生类上指定实现接口

  16. 16

    如何找出未实现的派生类的方法?

  17. 17

    如何找出未实现的派生类的方法?

  18. 18

    如何实现派生类并从Button调用它?

  19. 19

    继承的方法无权访问派生类中的新实现

  20. 20

    是否可以(部分)实现抽象方法,并且仍然需要派生类也可以实现它?

  21. 21

    是否可以(部分)实现抽象方法,并且仍然需要派生类也可以实现它?

  22. 22

    强制派生类实现接口

  23. 23

    用模板实现派生类

  24. 24

    派生类的通用相等实现

  25. 25

    如何在没有CWinApp派生类的情况下实现MFC序列化?

  26. 26

    如何从派生类中获取基类实例

  27. 27

    如何从C ++中的基类访问派生类的属性?

  28. 28

    如何在派生类中重写`toString`并使用基类中的私有实例变量?

  29. 29

    如何在python中相同的重载派生类方法中调用基类方法?

热门标签

归档