组成而不是继承

时间:2016-05-04 08:03:51

标签: c# inheritance mvvm object-composition

我正在使用MVVM模式.NET Framework 4.6.1开发WPF。和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");
        }
    }
}
来自MainViewModel

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

我可以这样做:

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

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

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

1 个答案:

答案 0 :(得分:6)

你不能在这里使用作文,至少不是你提出的方式。当某些内容想要订阅MainViewModel对象的属性更改通知时,它会首先检查MainViewModel是否实现了INotifyPropertyChanged。它不适用于您的情况 - 因此无法通知任何人有关财产变更的信息。

如果您不想继承ObservableObject - 请不要。只需在INotifyPropertyChanged中实施MainViewModel,就没有任何问题。