3

我正在开发一个带有 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");
        }
    }
}

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 链接时。

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

4

1 回答 1

7

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

如果你不喜欢继承ObservableObject- 不要。只需执行INotifyPropertyChangedin MainViewModel,没有任何问题。

于 2016-05-04T08:06:23.847 回答