Насколько целесообразна связь между ViewModels в MVVM - PullRequest
4 голосов
/ 23 ноября 2010

Я разрабатываю довольно простое приложение WPF для отображения иерархии объектов и сведений о выбранном объекте, с UserControl переносом TreeView на левой панели (древовидный элемент управления) и другим UserControl переносомListView / GridView справа (элемент управления подробностями).

Элемент управления деревом использует MVVM, следуя этой статье Джоша Смита , достаточно разумно и имеет несколько типов ViewModel, всеполученный из того же базового типа, TreeViewModel.Главное окно настроено с использованием MainWindowViewModel, как в этой статье Джоша Смита , и раскрывает TreeViewModel, используемый для заполнения первого поколения элемента управления деревом.

Однако, когда яЯ хочу заполнить область сведений справа, у меня проблема в том, что SelectedItem элемента управления дерева происходит от TreeViewModel, когда мне нужен совершенно другой тип ViewModel для панели сведений, который расширит объект в таблицусвойств / значений с использованием отражения.

Итак, вопросы:

  1. Уместно ли для MainWindowViewModel выставить TreeViewModel для древовидного элемента управления?Я считаю, что ответ здесь - да, но я открыт для предложений об обратном.

  2. Как следует адаптировать выбранный элемент в древовидном элементе управления к нужному типу ViewModel для области сведений?Один из вариантов, по-видимому, заключается в том, что MainWindowViewModel отслеживает выбранный элемент в дереве и выполняет адаптацию, выставляя его как другое свойство, но я не уверен, что есть лучшее решение.

Я новичок в WPF и шаблоне MVVM, поэтому прошу прощения за довольно простую природу вопроса.Я довольно много читал по фону шаблона, просмотрел некоторые примеры приложений и т. Д., Но не могу найти ничего достаточно конкретного, чтобы убедить меня в ответе.Я также понимаю, что MVVM может быть излишним для такого простого приложения, но я использую его частично как учебное упражнение.

Ответы [ 3 ]

1 голос
/ 23 ноября 2010

1. Подходит ли MainWindowViewModel для представления TreeViewModel для элемента управления деревом?

Я верю, да.Модель должна скрывать внешний вид от логики FOR THE LOOK, но она не может скрывать тройки как логическую структуру.

2.Как следует выбрать для выбранного элемента в древовидном элементе управления правильный тип ViewModelдля панели подробностей?Один из вариантов, по-видимому, заключается в том, что MainWindowViewModel отслеживает выбранный элемент в дереве и выполняет адаптацию, выставляя его как другое свойство, но я не уверен, что есть лучшее решение.

ИМХО нет.

0 голосов
/ 23 ноября 2010

Однако, когда я хочу заполнить панель сведений справа, у меня возникает проблема, связанная с тем, что SelectedItem элемента управления дерева является производным от TreeViewModel, когда мне нужен совершенно другой тип ViewModel для панели сведений, который будетразверните объект в таблицу свойств / значений, используя отражение.

Если вы действительно, действительно обеспокоены этим, вы можете построить класс модели представления более высокого порядка, который предоставляет два разных свойства - однотипа TreeViewModel и типа DetailsViewModel.Затем модель представления главного окна будет предоставлять один и тот же объект как элементу управления деревом, так и элементу управления деталями, но логическая структура двух типов представлений будет отделена друг от друга.

Логически выбранный элемент вдревовидный элемент управления и элемент, отображаемый в элементе управления данными, - это одно и то же.В то время как элемент управления details не предоставляет информацию о родительских / дочерних отношениях объекта, а элемент управления tree не предоставляет информацию о парах имя / значение объекта, он все равно остается тем же.Вероятно, в действительности нет необходимости беспокоиться о том факте, что один объект, представляющий вещь, предоставляет свойство, которое использует только одно представление этой вещи.

0 голосов
/ 23 ноября 2010

Работая над подобной проблемой, я пришел к выводу, что

object Tag { get; set; }

свойство неизбежно :( за исключением, может быть, некоторых редких ситуаций (только один тип объектов во всем дереве).

...