我正在使用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链接时。
我可以在这里使用合成,还是必须使用继承?
答案 0 :(得分:6)
你不能在这里使用作文,至少不是你提出的方式。当某些内容想要订阅MainViewModel
对象的属性更改通知时,它会首先检查MainViewModel
是否实现了INotifyPropertyChanged
。它不适用于您的情况 - 因此无法通知任何人有关财产变更的信息。
如果您不想继承ObservableObject
- 请不要。只需在INotifyPropertyChanged
中实施MainViewModel
,就没有任何问题。