组合而不是继承
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");
}
}
}
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();
}
}
但是我用composition的时候好像是public event PropertyChangedEventHandler PropertyChanged;
in ObservableObject
的问题。问题是 XAML link.
我可以在这里使用组合还是必须使用继承?
你不能在这里使用构图,至少不能以你展示的方式使用。当某些东西想要为您的 MainViewModel
对象订阅 属性 更改的通知时 - 它会首先检查 MainViewModel
是否实现了 INotifyPropertyChanged
。它不是你的情况 - 所以它不能通知任何人关于 属性 的变化。
如果您不喜欢从 ObservableObject
继承 - 不要。在MainViewModel
中实现INotifyPropertyChanged
就可以了,没问题
我正在开发具有 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();
}
}
但是我用composition的时候好像是public event PropertyChangedEventHandler PropertyChanged;
in ObservableObject
的问题。问题是 XAML link.
我可以在这里使用组合还是必须使用继承?
你不能在这里使用构图,至少不能以你展示的方式使用。当某些东西想要为您的 MainViewModel
对象订阅 属性 更改的通知时 - 它会首先检查 MainViewModel
是否实现了 INotifyPropertyChanged
。它不是你的情况 - 所以它不能通知任何人关于 属性 的变化。
如果您不喜欢从 ObservableObject
继承 - 不要。在MainViewModel
中实现INotifyPropertyChanged
就可以了,没问题