Код ниже только для целей руководства для MVVM.Может компилироваться или не компилироваться.
Способ 1:
Предполагая, что TreeViewItemViewModel
является контекстом данных модели представления уровня базового элемента для всех элементов представления дерева в вашем дереве, добавьте свойство с возможностью записив TreeViewItemViewModel
называется IsSelected
.Не забывайте уведомлять об изменениях свойств в IsSelected
в Setter.
В вашем дереве просмотра XAML добавьте следующее в Style
, предназначенное для TreeViewItem
....
<TreeView.Resources>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
</Style>
</TreeView.Resources>
Таким образом, когда выбран любой TreeView, ТОЛЬКО его собственное свойство TreeViewItemViewModel
IsSelected
будет иметь значение true, а все остальные элементы представления дерева будут иметь значение false.Таким образом, оставшейся задачей было бы найти выбранный TreeViewItemViewModel
объект из иерархии объектов, связанных с ItemsSource
из TreeView
.
Способ 2:
Иметь присоединенное свойстводля TreeViewItem и обработать его событие MouseDown.Проверьте, является ли значение IsSelected объекта TreeViewItem истинным и извлеките его контекст данных, который будет выбранным TreeViewItemViewModel
.
<TreeView.Resources>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="local:MyAttachedBehavior.HandleMouseDown" Value="true" />
</Style>
</TreeView.Resources>
в статическом методе изменения свойства зависимости HandleMouseDownPropertyChanged (), обработайте событие MouseDownна (TreeViewItem)sender
...
((TreeViewItem)sender).MouseDown += TreeViewMouseDownEventHandler;
private static TreeViewMouseDownEventHandler(object sender, MouseButtonEventArgs e)
{
var treeViewItem = (TreeViewItem)sender;
if (treeViewItem.IsSelected)
{
var mySelectedItem = treeViewItem.DataContext as TreeViewItemViewModel;
}
}
Передайте этот выбранный экземпляр TreeViewItemViewModel в качестве необходимого выбранного элемента в вашу процедуру.
Дайте мне знать, если это поможет.