2009-02-03 2 views
8

Постановка задачиКак поддерживать согласованность модели и модели представления в шаблоне MVVM?

Я пишу очень простое приложение WPF изменять содержимое файла конфигурации. Формат данных представляет собой XML-файл со схемой. Я хочу, чтобы использовать его в качестве учебного проекта для MVVM, так что я должным образом разделить код на

  • Модель: C# классы автоматически генерируется из Xsd.exe

  • View-модель : Представление дружественного представления модели.

  • Просмотр: Xaml и пустой код за

Я понимаю, как View-модель может сделать View-связывающим ветер. Тем не менее, не оставляет ли модель View-Model < -> семантики модели очень неудобной? Xsd.exe генерирует классы C# с массивами для нескольких элементов XML. Однако на уровне V-VM вам понадобятся Observable Collections.

Вопросы:

Значит ли это на самом деле означает, что я должен держать две совершенно разные типы коллекций, представляющих одни и те же данные в последовательности?

Каковы наилучшие методы поддержания согласованности между моделью и моделью просмотра?

ответ

6

Я не большой эксперт, но я думаю, что это так. Общая идея состоит в том, чтобы распространять изменения между представлением и viewModel через Binding, а затем между ViewModel и Model через события (в направлении Model -> ViewModel) или зависимости (в другом направлении).

Я не знаю, как это стандарт, но мое понимание MVVM заключается в том, что ViewModel должен содержать ссылку на модель, так что, когда пользователь изменяет представление, ViewModel должен вызывать соответствующий код модели. В обратном направлении модель должна поднять события при изменении, и ViewModel должен соответствующим образом обновить себя (ViewModel является наблюдателем модели).

2

@ Это действительно означает, что мне нужно сохранить два совершенно разных типа коллекций, представляющих одни и те же данные в согласованности?

Я думаю, да. Это довольно скучно, но все работает неплохо. Надеюсь, в будущем у нас будет также генератор кода для создания части ViewModel.

Karl работает на том, что: http://karlshifflett.wordpress.com/mvvm/

2

Вы должны четко ObservableCollections на ViewModel так, да, вы будете нуждаться в двух совершенно разные типы коллекций в модели и в ViewModel.

Я сделал статью о выполнении отмены/повтора в MVVM, где вы можете найти возможное решение этого. Он использует то, что я называю MirrorCollection: производный класс ObservableCollection автоматически получает свои предметы из списка (список модели).

Я думаю, что это интересное решение, вы можете найти статьи здесь

Part 1: Using the Viewmodel pattern to provide Undo/Redo in WPF

Part 2: Viewmodelling lists (здесь это определение MirrorCollection)

0

Expose События или делегатов в модели и крючком к тому же в ViewModel, когда когда-либо значения в моделях меняются, уведомляются в viewmodel через событие или делегаты, а из Viewmodle вы можете обновить интерфейс.

Если вы хотите обновить его от модели представления до такой простой модели, как просто вызвать какой-либо метод, передайте новые значения

Смежные вопросы