Легкая модель MVVM подтолкнула к управлению и DataService - PullRequest
0 голосов
/ 19 апреля 2019

Я создаю пользовательский элемент управления WPF. Он должен отражать модель, которая должна быть установлена ​​на элемент управления из приложения, использующего мой элемент управления.

В контроле я использую паттерн MVVM на основе MVVM Light. У меня есть некоторые представления и модели представления, и на основе свойства «Mode» ContentControl в моем usercontrol будет связан со свойством типа ViewModelBase. Затем usercontrol использует DataTemplates, так что contentcontrol будет показывать соответствующее представление.

В образцах MVVM Light они, как правило, используют DataService для извлечения модели. Мне очень нравится эта идея, так как она позволяет устанавливать данные Designtime.

Теперь к моему вопросу. В моем случае я не могу взять модель из известного места, модель будет установлена ​​извне и может быть изменена на другой объект во время выполнения. Каков ваш рекомендуемый шаблон проектирования для поддержки того, что все еще допускает данные Designtime?

Также моя мысль сейчас (если не лучшая рекомендация) состоит в том, чтобы добавить свойство «Модель» в код контроля пользователя, чтобы приложение могло устанавливать / изменять модель. Пользовательский элемент управления затем должен уведомить виртуальную машину (-ы) (или, возможно, DataService) о ее чтении. Я знаю, что модель обычно не устанавливается через View / usercontrol, но для пользователя, который использует мой элемент управления, мне кажется наиболее интуитивным, что он просто скажет control.Model = theModel;

Моя лучшая идея состоит в том, чтобы позволить пользовательскому коду контроля за свойством использовать Messenger для отправки модели либо на DataService, либо напрямую на все виртуальные машины. Чтобы вы посоветовали? Если я использую DataService, я предполагаю, что DataService так или иначе должен был бы как-то уведомить ВМ, что модель все равно изменилась.

Также в целом, используя этот дизайн, где объект модели может быть изменен на другой экземпляр, как бы вы проектировали модель для уведомления ViewModels об измененных свойствах. INotifyPropertyChanged, Messenger или что-то еще?

...