В настоящее время я занимаюсь разработкой нового приложения WPF, и большая часть моего уровня бизнес-логики разработана (т.е. мои модели).
Я собираюсь реализовать классы ViewModel для представления одной функции моего приложения. Я совершенно новичок в модели Model-View-ViewModel, и у меня возник вопрос, какой подход лучше всего использовать при реализации моих классов ViewModel.
Из примеров в Интернете я обнаружил, что Модель часто является членом ViewModel. Используя этот подход, ViewModel предоставляет свойства члена-модели, чтобы их можно было связать с моделью в представлении.
Например:
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.