【发布时间】:2011-06-20 18:38:00
【问题描述】:
我目前正在开发一个新的 WPF 应用程序,并且我的大部分业务逻辑层都已开发(即我的模型)。
我即将实现 ViewModel 类来代表我的应用程序的一项功能。我对 Model-View-ViewModel 模式很陌生,我有一个问题,即在实现我的 ViewModel 类时最好使用哪种方法。
从在线示例中,我发现模型通常是 ViewModel 的成员。使用这种方法,ViewModel 会公开 Model-member 的属性,以便它们可以绑定到 View 中的 Model。
例如:
Public Class MyViewModel
Implements INotifyPropertyChanged
Public Event PropertyChanged(ByVal sender As Object, ByVal e As System.ComponentModel.PropertyChangedEventArgs) Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
Private _myModel As ModelClass
Public Property MyModelPropertyA As Object
Get
Return _myModel.MyModelPropertyA
End Get
Set(ByVal value As Object)
_myModel.MyModelPropertyA = value
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("MyModelPropertyA")
End Set
Public Property MyModelPropertyB As Object
Get
Return _myModel.MyModelPropertyB
End Get
Set(ByVal value As Object)
_myModel.MyModelPropertyB = value
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("MyModelPropertyB")
End Set
'.... And so On'
End Class
我不喜欢这种方法的一点是,我将重写很多属性。
所以,我正在考虑在 ViewModel 中继承模型类而不是使用私有成员的选项。
像这样:
Public Class MyViewModel
Inherits MyModel
Implements INotifyPropertyChanged
Public Event PropertyChanged(ByVal sender As Object, ByVal e As System.ComponentModel.PropertyChangedEventArgs) Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
'Now all of my properties are inherited'
End Class
第二种方法的问题是我不确定如何在应用程序运行时将我的模型转换为视图模型。
您不能设置 viewModelInstance = ModelInstance。
(但你可以设置modelInstance = viewModelInstance)
我正在寻找有关如何实现 ViewModel 类的最佳方法的建议。
【问题讨论】:
-
您对继承的使用很有趣。关于您的最后一个问题,您需要一个隐藏对象创建的工厂。不过,我看到的一个问题是,一个模型对象是否出现在两个不同的视图上,因此有两个不同的视图模型。如果它已经被实例化为 VmA,那么你不能变成 VmB。
标签: .net wpf vb.net mvvm viewmodel