В wpf treeview, как перерисовать узлы с их предыдущими расширенными значениями (используя MVVM) - PullRequest
2 голосов
/ 04 февраля 2010

Я разрабатываю настольное приложение wpf со строгим шаблоном MVVM.
В настоящее время мое приложение делает следующие вещи:

  • Отображение дерева с помощью HierarchicalDataTemplate.
  • Пользователь может развернуть или свернуть Узлы.
  • Пользователь может добавить добавить новые узлы (Перетащите n Drop + двойной щелчок).
  • Каждый раз, когда добавляется новый узел, модель обновляется, а древовидное представление воссоздается на основе модели.
  • Поскольку Treeview воссоздается, все узлы отображаются как развернутые после добавления узлов.

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

  • Модель не должна содержать никаких данных, связанных с тем, как рисовать пользовательский интерфейс ??
  • ВМ должна просто получить данные из модели и поместить их в пользовательский интерфейс (и передать дату из пользовательского интерфейса в модель) ??

Спасибо за ваши мысли. Я могу быть далеко от рельса. Но просто хочу получить немного мудрости от вас, ребята.

Спасибо
PAIJA

Ответы [ 3 ]

2 голосов
/ 04 февраля 2010

Если вы еще этого не сделали, прочитайте эту замечательную статью Джоша Смита: Упрощение WPF TreeView с помощью шаблона ViewModel

По сути, он предлагает включить свойство под названиемIsExpanded в вашей виртуальной машине и правильно привязайте TreeView к ней, чтобы программист полностью управлял развернутым / свернутым состоянием.

1 голос
/ 04 февраля 2010

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

Спасибо, Джагдев Джосан

0 голосов
/ 04 февраля 2010

Модель представления может содержать информацию, относящуюся к представлению, для чего она предназначена. Это мост между чистым бизнесом и чистым взглядом. Мои модели представлений обычно предоставляют несколько бизнес-свойств объекта и добавляют несколько связанных свойств представления. Если все, что вам нужно, это бизнес-свойства, то связывайте прямо с бизнес-уровнем. Только когда вам нужно сделать что-то подобное вашей ситуации, вам нужна модель представления.

Если вы хотите полностью воссоздать дерево (что звучит странно), вы можете сохранить развернутое состояние узлов в вашей модели представления и связать их с элементами представления дерева, используя ItemsContainerStyle. таким образом, когда вы воссоздаете свое древовидное представление, ваши ранее развернутые узлы будут по-прежнему расширяться.

Таким образом, ваши обернутые бизнес-объекты будут содержать дополнительное свойство IsExpanded, которое вы можете использовать для восстановления состояния древовидного представления.

P.s. я упомянул его немного сверху, чтобы воссоздать вид дерева?

...