Как связать со свойством SelectedItem WPF TreeView?

Я адаптировал пример проекта TreeView Control для использования с объектами Entity Framework. Это прекрасно работает, но, как и многие другие, пытаются обновить коллекции или свойства на основе своих ParentViewModels SelectedItem изменения, я тоже не могу преодолеть разрыв в понимании.

Я работаю в MVVM и хочу, чтобы мой код был свободен от каких-либо проблем. Как новичок, мне нравится чистота реализации PropertyChanged уведомления, но так как они не являются неотъемлемым свойством "SelectedItem" для привязки на TreeView Я не могу вызвать событие PropertyChanged, как обычно ListBox,

У меня тоже есть свойство SelectedItem (которое фактически успешно захватывает объект, где isSelected = true) в моем ChildViewModel (см. Ответ HB на этот вопрос). У меня также есть SelectedItem типа ChildViewModel в моем ParentViewModel, который привязан к моему View (см. Пост @Martin Liversage здесь). Я не могу заставить их синхронизироваться.

Пожалуйста, помогите мне понять, как сообщить SelectedItem свойство моего ChildViewModel для моего ParentViewModel. Я не привязываю свой TreeView к CollectionView поэтому я не могу получить CurrentItem в представлении коллекции.

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

1 ответ

Решение

Итак, по крайней мере, вы начинаете привыкать к ежедневному MVVM-WTF... "Почему я должен публиковать на SO такие простые вещи, как этот". Однажды ты полюбишь MVVM, обещаю;)

При этом, как вы знаете, TreeView не поддерживает синхронизацию SelectedItem имущество. Хотя он существует, но доступен только для чтения. Что вы хотите сделать, так это расширить поведение TreeView для синхронизации выбранного элемента со свойством его ViewModel.

Это описание проблемы указывает на правильное направление: поведение. Поведения (или, если быть точным, System.Windows.Interactivity.Behavior<>s) позволяют расширять функциональность любого DependencyObject, ( Хорошее введение)

Подход к синхронизации вашего TreeView с выбранным элементом с помощью поведения можно найти здесь:

ТАК Нить

Это должно сделать для вас уже. Вы можете просто скопировать и вставить код Steve GreatRex и пойти на это. Пожалуйста, прокомментируйте, если вам нужна помощь с подходом. Удачи в обучении!

Другие вопросы по тегам