我目前正在開發一個新的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