gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 12:00:50 24 4
gpt4 key购买 nike


更新:抱歉我没问清楚这个问题。我应该提到的是:

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

  2. 基地中有许多特性。示例代码已简化。


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

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

现在我希望将其属性绑定(bind)到 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 实现接口(interface),并在设置 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 继承接口(interface)实现,因此只需将其从类声明中删除即可:

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));
}
}
}

关于c# - 基类没有实现INotifyPropertyChange;如何在派生类中实现它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29979384/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com