组合而不是继承

Composition instead of inheritance

我正在开发具有 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();
    }
}

但是我用composition的时候好像是public event PropertyChangedEventHandler PropertyChanged; in ObservableObject的问题。问题是 XAML link.

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

你不能在这里使用构图,至少不能以你展示的方式使用。当某些东西想要为您的 MainViewModel 对象订阅 属性 更改的通知时 - 它会首先检查 MainViewModel 是否实现了 INotifyPropertyChanged。它不是你的情况 - 所以它不能通知任何人关于 属性 的变化。

如果您不喜欢从 ObservableObject 继承 - 不要。在MainViewModel中实现INotifyPropertyChanged就可以了,没问题