WPF Подсветка нескольких узлов / листьев в виде дерева на основе выбора - PullRequest
0 голосов
/ 16 мая 2018

У меня есть связанный, иерархический TreeView. В зависимости от характера базовых данных, один и тот же объект может появляться в дереве несколько раз:

A
--A1
  ---A11
--A2
B
--B1
--A1      <<< A1 is a node under both A and B
  ---A11  <<< A11 also shows up twice since it is a child of A1

Обратите внимание, что, хотя в моем примере я показал 3 уровня, реальные данные могут иметь неограниченное количество уровней. И один и тот же объект может отображаться на нескольких уровнях. Мой TreeView с HierarchicalDataTemplate показывает это прекрасно.

Поскольку A1 может появляться в нескольких местах, я хочу выделить это для пользователей, чтобы они знали, что редактирование A1 повлияет не только на ветвь A, но и на ветвь B.

Обратите внимание, что цель состоит в том, чтобы просто выделить другой A1, а не изменить выбор.

Единственное решение, к которому я пришел, - это иметь свойство IsHighlighted в базовом классе для объектов. Когда выбран A1, я изменяю значение IsHighlighted с помощью обработчика SelctedItemChanged. IsHighlighted, в свою очередь, связан со свойством TreeViewItem Background через конвертер, и обновление графического интерфейса пользователя инициируется уведомлением об изменении свойства.

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

Каков рекомендуемый способ реализации этого?

1 Ответ

0 голосов
/ 16 мая 2018

Я бы придерживался модели с двумя свойствами:

  • Имя
  • IsHighlighted

Вот почему:

ЛогикаВы говорите, по сути, это логика представления, но она не решает как представление отображает данные;вместо этого он только представляет , что отображает представление.Следовательно, он должен находиться в представлении модели.Модели представлений независимы - это означает, что в них нет объектов представления (например, Listview, Buttons и т. Д.), Но они являются объектным представлением представления (или моделью представления).

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