Путаница в отношении шаблона MVVM и динамической загрузки XAML в GUI - PullRequest
4 голосов
/ 24 мая 2009

Что ж, этот вопрос относится к шаблону MVVM, и я мог бы найти хорошие и быстрые ответы на этом форуме, поэтому я подумал спросить и очистить путаницу, которую я имел в отношении шаблона.

Я новичок в подходе MVVM. Я ценю шаблон и понимаю принципы, стоящие за ним. Может быть, я не так много работал с шаблоном, поэтому есть несколько путаницы.

Если есть сценарий, в котором я хочу динамически загружать несколько частей своей страницы WPF с помощью XAML и при этом все же хотеть быть совместимым с подходом MVVM.

Путаница:

  1. Где находится логика загрузки представления динамически с XAML.
  2. Должен ли я иметь одну ViewModel для своей страницы WPF или каждая отдельная часть имеет свою собственную модель представления с взаимодействиями с другими классами модели представления.
  3. Что если бы мне пришлось построить дерево управления, отображаемое в графическом интерфейсе, используя код C # в самом коде позади. Для элементов управления, созданных с использованием кода, я должен делать привязки команд в коде позади самого представления.

Ответы [ 2 ]

1 голос
/ 29 мая 2009

Куда идет логика загрузки - это то, что не учитывается самим шаблоном. Об этом интересно Уорд Белл сообщение в блоге . Существует множество способов обнажить этого кота, и все они совместимы с MVVM. Не знаю, какой ответ ты ищешь, я знаю, но это честно :). Прочтите сообщение в блоге Уорда ... вы получите более глубокое обсуждение этой темы.

Что касается наличия или отсутствия одной виртуальной машины для страницы или одной виртуальной машины для каждого элемента управления, то это зависит только от этого. Как правило, у меня есть один для страницы. Если есть какая-то часть, которую можно использовать в другом месте, я делю ее на пользовательский элемент управления со своей собственной виртуальной машиной, что означает, что у нас есть виртуальная машина внутри виртуальной машины. Я не согласен с Rockeye по этому вопросу. Между V-VM-M нет однозначного отношения. Ваши модели разработаны в соответствии с потребностями бизнеса, без учета презентации вообще. Вы ViewModels разработаны в соответствии с вашими потребностями презентации и могут включать в себя более одной модели. На самом деле, они очень часто инкапсулируют многие модели.

Как и Rockeye, я не понимаю ваш последний вопрос.

0 голосов
/ 25 мая 2009

Я тоже новичок в mvvm, но постараюсь ответить:

  1. Где логика загрузки представления динамически с XAML

Если вы имеете в виду «как я могу показать представление, связанное с моим бизнес-объектом?», ИМХО, вам не нужно заботиться об этом. Обычно ваши виртуальные машины имеют соответствующие представления. При использовании dataTemplate в коде используется только виртуальная машина, но представления отображаются автоматически.

2 Должен ли я иметь одну ViewModel для своей страницы WPF или каждая отдельная часть имеет свою собственную модель представления с взаимодействиями с другими классами модели представления

Кажется, у вас подход сверху вниз. Я вижу mvvm как восходящий: модели (бизнес-объекты) -> ViewModels -> Views. Каждая модель должна иметь свою собственную ViewModel и представление. Таким образом, вы не можете иметь целую страницу WPF в viewModel, если ваша модель не представляет страницу.

3 Что если бы мне пришлось построить дерево управления, отображаемое в графическом интерфейсе, используя код C # в самом коде позади. Для элементов управления, созданных с использованием кода, я должен делать привязки команд в коде позади самого представления.

Не понимаю. Я думаю, что вы можете взглянуть на dataTemplate, это может быть полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...