2 回答
TA贡献1847条经验 获得超11个赞
好吧,我通过走不同的路线解决了这个问题。我不是MouseDown在文本块上挂钩事件,而是SelectedItemChanged在树视图上挂钩事件。
<TreeView
ItemsSource="{Binding GTOs}"
SelectedItemChanged="TreeView_SelectedItemChanged">
在RoutedPropertyChangedEventArgs该的SelectedItemChanged事件包含视图模型的特定TreeViewItem,其产生的导航Uri属性我需要(我以前绑定这个属性到文本框的标签属性)。
新的事件处理程序如下所示:
private void TreeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
dynamic viewModel = e.NewValue;
var uri = viewModel.Uri;
(DataContext as TreeViewModel).Navigate(uri);
}
树的每一层都包含不同的 ViewModel 类型,但它们都有一个 Uri 属性,因此dynamic绑定提供了所需的“不关心它是什么类型”的行为。
我现在可以从 TextBlock 中删除Tag绑定和MouseDown事件。
<HierarchicalDataTemplate DataType="{x:Type local:TreeGTOViewModel}" ItemsSource="{Binding Children}">
<TextBlock
Width="{Binding RelativeSource={RelativeSource AncestorType={x:Type TreeView}}, Path=ActualWidth}"
Text="{Binding Title}" />
并且树视图项目现在可以正确响应,无论单击何处。
- 2 回答
- 0 关注
- 163 浏览
添加回答
举报