【发布时间】:2016-06-13 20:25:20
【问题描述】:
我正在使用 C# 和 .NET Framework 4.6 开发一个 MVVM 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));
}
}
我在这里实现了INotifyPropertyChanged,因为我不想在我所有的 ViewModel 类中实现它。
要使用这个类,我使用继承:
public class Presenter : ObservableObject
{
private string _someText;
public string SomeText
{
get { return _someText; }
set
{
_someText = value;
RaisePropertyChangedEvent("SomeText");
}
}
}
但是,有没有办法通过对象组合来使用ObservableObject?
我将对象组合理解为在 Presenter 类中创建 ObservableObject 的私有对象实例而不是继承。
我不确定是否有任何 ViewModel 类应该实现 INotifyPropertyChanged。
更新:
这不是重复的问题。我在问 ViewModel 是否必须始终实现 INotifyPropertyChanged 接口,或者我可以使用对象组合。我之前已经解释过了。请仔细阅读我的问题。
【问题讨论】:
-
我过去使用过
ReSharper,它在对象上使用注释来提供INotifyPropertyChanged功能。但是我想使用我自己的实现,因为 resharper 并不总是会给我使用注释的选项,它会归结为操作已编译的程序集并将适当的函数插入到正确的位置。 -
我更新了我的问题,提供了更多细节。
-
您的
VM需要实现INPC的原因是因为UI 在使用Binding时会使用该事件来刷新屏幕。如果您不使用 Binding 并且仅使用代码隐藏,那么可以,您的VM不需要INPC实现。 -
这不是我问的关于继承和对象组合与已实现 INotifyPropertyChanged 接口和 ViewModel 类的对象的重复问题。请仔细阅读我的问题。
标签: c# wpf inheritance mvvm composition