c# - 有没有办法将 treeViewItem 名称作为命令参数传递?
问题描述
我正在创建一个绑定到集合的简单树视图。我想要的是在选择树视图元素时在列表视图中显示有关集合元素的完整信息。类似于 windows 文件资源管理器。问题是我无法将选定的 treeviewitem 绑定到命令。
尝试使用 treeviewitem 名称参数将命令绑定到 SelectedItemChanged 事件 - 无效。用一个简单的事件进行了尝试 - 变得很麻烦并打破了 MVVM 模式。必须有一种优雅的方法来解决这个问题,因为我正在尝试做的事情在不同的应用程序中非常普遍。
<TreeView Grid.Row="1" Background="AliceBlue" ItemsSource="{Binding TopPanelNodes}" Name="TopTreeView" SourceUpdated="TopTreeView_SourceUpdated" >
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Path=Nodes}">
<StackPanel HorizontalAlignment="Left" Orientation="Horizontal" IsEnabled="False">
<TextBlock Text="{Binding Name}" >
</TextBlock>
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectedItemChanged">
<i:InvokeCommandAction Command="{Binding UpdateInspectorCommand }" CommandParameter=??? />
</i:EventTrigger>
</i:Interaction.Triggers>
</TreeView>
我想将 treeviewitem 名称作为命令参数而不是 ??? 在我的代码中,选定的树视图项目将按名称标识,因此我可以获得相应的信息并将其绑定到列表视图。
解决方案
使用RelativeSource解决了它。
CommandParameter="{Binding Path=SelectedItem, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TreeView}}}"
工作正常。
推荐阅读
- azure - 无法将通过 Azure 购买的自定义域与应用服务一起使用
- python - CX_Oracle 使用 Bind 变量/函数插入数据并返回记录 id
- html - 如何用原始内容填写rails表单?
- c# - 如何使用itextsharp c#在pdf中获取注释主题
- python - 如果两个元素相同,如何替换列表中的两个元素(Python)
- visual-studio-code - 将现有代码推送到新行时如何停止 VSCode 缩进?
- azure - 如何在 Azure Pipelines 中手动触发单个作业?
- asp.net-mvc - MVC 中的模型状态验证
- python - Kivy,提交按钮时调用下拉列表
- reactjs - 如何将中间的 Grid 项目从 3 个项目向下放置,将第一个和第三个项目放在顶部?