以下代码仅用于 MVVM 的指导目的。它可能会/可能不会编译。
方式一:
假设您的TreeViewItemViewModel 是树中所有树视图项的基本项级别视图模型数据上下文,请在TreeViewItemViewModel 中添加一个名为IsSelected 的可写属性。不要忘记在IsSelected的Setter中通知属性变化。
在您的 XAML 树视图中,将以下内容添加到针对 TreeViewItem 的 Style ....
<TreeView.Resources>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
</Style>
</TreeView.Resources>
这样,当任何 TreeView 被选中时,只有它自己的 TreeViewItemViewModel 的 IsSelected 属性为真,其余所有树视图项都为假。所以剩下的任务是从绑定到TreeView的ItemsSource的对象层次结构中找到选定的TreeViewItemViewModel对象。
方式二:
拥有 TreeViewItem 的附加属性并处理其 MouseDown 事件。检查 TreeViewItem 的 'IsSelected' 值是否为真并提取其数据上下文,这将是选定的TreeViewItemViewModel。
<TreeView.Resources>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="local:MyAttachedBehavior.HandleMouseDown" Value="true" />
</Style>
</TreeView.Resources>
在静态HandleMouseDownPropertyChanged()依赖属性改变方法中,处理(TreeViewItem)sender上的MouseDown事件...
((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”实例作为所需的选定项传递给您的例程。
如果这有帮助,请告诉我。