基类没有实现INotifyPropertyChange;我如何在派生类中实现它?

时间:2015-04-30 23:19:38

标签: c# wpf

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

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

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

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

    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被更改时,如何引发属性更改事件?

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

1 个答案:

答案 0 :(得分:2)

创建new修饰符以隐藏现实世界的基础并报告Name的属性更改,例如:

public class Derived : Base, INotifyPropertyChanged
{ 
  public new string Name
  {
    get { return base.Name; }
    set { base.Name = value;
          RaisePropertyChanged("Name");
        }
  } 
}

请参阅MSDN:new Modifier C# Reference了解其原因。

更新

  

我知道我可以删除继承并重新实现每个基础   财产和提高事件,但还有更好的方法吗?

否......在没有执行上面的修饰符的情况下,没有办法在基类中的setter上实现PropertyChange调用。