gpt4 book ai didi

c# - 组合而不是继承

转载 作者:行者123 更新时间:2023-11-30 14:08:02 26 4
gpt4 key购买 nike

我正在开发一个带有 MVVM 模式的 WPF,.NET Framework 4.6.1。和 C#。

我的问题不是关于 WPF,而是关于对这两个类使用组合而不是继承:

public class ObservableObject : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;

protected void RaisePropertyChangedEvent(string propertyName)
{
var handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyName));
}
}

和:

public class MainViewModel : ObservableObject
{
private string statusPrinter;

public string StatusPrinter
{
get { return statusPrinter; }
set
{
statusPrinter = value;
RaisePropertyChangedEvent("StatusPrinter");
}
}
}

MainViewModelObservableObject 继承,我不想使用继承。

我能做到:

public class MainViewModel
{
private string statusPrinter;
private ObservableObject observable;

public string StatusPrinter
{
get { return statusPrinter; }
set
{
statusPrinter = value;
observable.RaisePropertyChangedEvent("StatusPrinter");
}
}

public MainViewModel()
{
observable = new ObservableObject();
}
}

但是当我使用合成时,ObservableObject 中的public event PropertyChangedEventHandler PropertyChanged; 似乎有问题。问题出在 XAML 链接时。

我可以在这里使用组合还是必须使用继承?

最佳答案

你不能在这里使用组合,至少不能以你呈现的方式使用。当某些东西想要订阅您的 MainViewModel 对象的属性更改通知时 - 它会首先检查 MainViewModel 是否实现了 INotifyPropertyChanged。它不会在您的情况下 - 因此它无法通知任何人有关属性更改。

如果您不喜欢从 ObservableObject 继承 - 不要。只需在 MainViewModel 中实现 INotifyPropertyChanged 即可,没有任何问题。

关于c# - 组合而不是继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37021875/

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