Это неправильно, чтобы получить доступ к TreeViewItems в TreeView WPF? - PullRequest
0 голосов
/ 23 марта 2012

У меня были проблемы с TreeView в WPF.Этот элемент управления очень затрудняет доступ к TreeViewItem s, которые он показывает.

Несколько раз я обходил вопрос о необходимости доступа к TreeViewItem, например, я согласилсятот факт, что я не должен обращаться к родительскому узлу через TreeView (и вместо этого я должен сам отслеживать родительский узел).Я делал это по двум причинам: во-первых, очевидно, что очень трудно добраться до TreeViewItem с, а во-вторых, мне сказали, что это сложно, потому что мне не нужно их если я все делаю правильно.

Однако на этот раз я действительно не вижу пути решения этой проблемы.

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

Я снова делаю что-то неправильно, пытаясь добраться до TreeViewItem, или это был бы правильный подход?

Ответы [ 4 ]

3 голосов
/ 23 марта 2012

Взгляните на Упрощение WPF TreeView с помощью статьи ViewModel Pattern Джоша Смита. надеюсь, это поможет.

1 голос
/ 23 марта 2012

По общему признанию, это не просто, но вы, вероятно, все еще можете сделать это, сохраняя разделение, которое не требует от вас сознательного доступа к TreeViewItems. Суть в WPF является обязательной, как уже отмечал Кент Бугаарт в своем другом вопросе , однако здесь вам необходимо как-то иметь дело с событиями. Ваша модель представления должна запускать собственное событие BringIntoView, в то время как представление должно реагировать.

Самым простым способом может быть добавление EventSetter к Loaded, чтобы заставить TreeViewItems подписаться на упомянутое событие на их DataContext, что должно быть вашей моделью представления (если это не так, вы можете подождать DataContextChanged).

0 голосов
/ 26 марта 2012

Я пришел к выводу, что это не может быть совершенно неправильно. Первое доказательство взято из сообщения Bea Stollnitz о ListView : если один из разработчиков WPF объясняет, как это можно сделать, это не может быть , что неправильно.

Другое свидетельство приходит из этого высоко оцененного вопроса / ответа: MVVM безумие . MVVM, несомненно, имеет свои преимущества, но иногда стоимость отслеживания MVVM настолько высока, что просто глупо доводить его до конца, особенно в небольших приложениях для одного человека. Вы действительно хотите выставить IsSelected и IsExpanded так, как вы должны ?

В результате я почувствовал себя оправданным, пытаясь выяснить, как выставить TreeViewItem, соответствующий элементу, с меньшими усилиями разработчика, при условии, что им никогда не понадобятся более продвинутые функции, которые привели к TreeViewItem это так сложно получить доступ (например, отображение одних и тех же моделей представления в нескольких различных элементах управления ... как часто вам нужно , что ! ...)

Я опубликовал результат этой работы как ответ на другой вопрос .

0 голосов
/ 23 марта 2012

Нет, я не вижу, каким образом неправильный доступ к элементам древовидной структуры.

Я думаю, что трудности, с которыми вы сталкиваетесь, заключаются в том, что вы не видите дерево, как оно должно быть.

У листа есть родитель, но нет детей.Узел может иметь родителя и может иметь детей.Узел без родителя является корнем.

Основываясь на этих принципах ( SourceMaking Composite pattern), вы должны иметь возможность делать все, что хотите, используя рекурсивность.(как в XAML, так и в коде)

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