Каков предпочтительный способ подключения моделей представления к их представлениям? - PullRequest
3 голосов
/ 28 марта 2011

Раньше, работая с MVVM, я создавал каждое представление как DataTemplate для соответствующей модели представления, чтобы обрабатывать их соединение.Я только начал использовать MVVM Light и заметил, что у них ViewModelLocator.Несколько других наборов инструментов, на которые я смотрел, включают в себя несколько вариантов этого, но какую выгоду это дает по сравнению с использованием DataTemplate?

Какой метод является лучшим для соединения ваших видов View и ViewModels?

Ответы [ 2 ]

6 голосов
/ 28 марта 2011

Есть два разных подхода, а не один "правильный путь".

Подход, которому помогает ViewModelLocator или аналогичный, - это подход View-First для разработки MVVM. Это означает, что вы начинаете с вашего View в конструкторе, а затем строите ViewModel для соответствия. По логике, представления часто создают другие представления, а ViewModel обычно загружается с помощью определенной формы локатора и заполняется для данного представления. Сообщения или службы используются для подключения соответствующих моделей к вновь созданным моделям представления.

Преимущество этого заключается в том, что дизайн немного проще, особенно при работе с Blend.

Другой подход заключается в работе «ViewModel-First». Таким образом, вы генерируете свои ViewModels, а затем используете DataTemplates для заполнения View. ViewModels будет создавать / создавать другие виртуальные машины, непосредственно устанавливая соответствующую модель. Это обычно (IMO) намного, намного чище с точки зрения программиста, так как все работает напрямую. Тем не менее, как правило, с точки зрения дизайнера проектировать и работать с ним труднее, так как данные времени разработки сложнее генерировать и т. Д.

Оба подхода совершенно верны и имеют сильные преимущества и недостатки. Различные пуристы MVVM предпочитают один подход другому по разным причинам - как правило, подходят ли они к этому с точки зрения чистоты кода или с точки зрения дизайнера.

1 голос
/ 28 марта 2011

То, как я это вижу:

  1. У вас есть одно приятное место для всех моделей просмотра.
  2. Есть хороший механизм очистки, который обеспечивает MVVMLight.
  3. ВыВы можете подключить ваши ViewModels в вашей разметке статически.--- Иногда это может быть проблемой, если вы не понимаете, что ваш ViewModel создается и устанавливается на DataContext, как только вы создаете экземпляр пользовательского интерфейса.

Для (3) (Как использовать ViewModelLocator):

  1. Убедитесь, что у вас установлены сниппеты.
  2. Откройте ViewModelLocator.cs и введите mvvmlocatorproperty.Выберите его в intellisense и дважды нажмите клавишу TAB, чтобы фрагмент работал.Измените его на соответствующее свойство.
  3. В вашем xaml вы будете использовать его следующим образом:

    <Window.DataContext>
        <Binding Path="HomePage" Source="{StaticResource Locator}"/>
    </Window.DataContext>
    

Для этого свойства:

    public HomePageViewModel HomePage
    {
        get
        {
            return HomePageStatic;
        }
    }
...