我目前正在开发一个新的WPF应用程序,并开发了大部分业务逻辑层(即我的模型)。MVVM设计考虑事项
我是关于实现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)
我在寻找咨询关于如何实现视图模型类的最佳方法。
您对继承的使用很有趣。关于你最后的问题,你需要一个隐藏对象创建的工厂。但是我看到的一个问题是,如果Model对象出现在两个不同的视图中,并且因此具有两个不同的视图模型。如果它已经被实例化为VmA,那么你不能变成VmB。 – HappyNomad 2011-02-03 18:38:19