在具有分层数据模板的树视图中绑定contextmenu命令
本文关键字:视图 绑定 命令 contextmenu 分层 数据 | 更新日期: 2023-09-27 18:08:55
我有一个具有分层数据模板的树视图,我试图为ContextMenu设置DataContext,因此我可以将命令绑定到它。我已经做了研究,知道ContextMenu不继承其父的DataContext。我试图遵循这些帖子:如何设置RelativeSource在一个数据模板是嵌套在一个HierarchicalDataTemplate?
如何从其ItemTemplate XAML绑定到一个HierarchicalDataTemplate的DataContext ?但还是不能让它工作。任何帮助都会很感激。下面是我的示例代码:
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type viewModels:SiteViewModel}" ItemsSource="{Binding Children}">
<StackPanel Orientation="Horizontal">
<StackPanel.Resources>
</StackPanel.Resources>
<Image Width="16" Height="16" Margin="3,0" />
<TextBlock Text="{Binding SiteName}" />
</StackPanel>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type viewModels:LevelViewModel}" ItemsSource="{Binding Children}" >
<StackPanel Orientation="Horizontal" >
<Image Width="16" Height="16" Margin="3,0" />
<TextBlock Text="{Binding LevelName}" >
<TextBlock.ContextMenu >
<ContextMenu>
<MenuItem Header="Test" Command="{Binding ?????????" CommandParameter="{Binding}"/>
</ContextMenu>
</TextBlock.ContextMenu>
</TextBlock>
</StackPanel>
</HierarchicalDataTemplate>
解决方法之一:在我的例子中是这样的:
<DataTemplate DataType="...">
<TreeView>
<TreeViewItem Tag="{Binding ElementName=LocalControl, Path=DataContext}"
Header="{Binding ...}"
ContextMenu="{StaticResource ...}">
...
</TreeViewItem>
</TreeView>
</DataTemplate>
你需要将父TreeViewItem的Tag属性绑定到它的DataContext,然后在你的上下文菜单的层次模板中,你应该将它的DataContext绑定到父控件的Tag:
<ContextMenu x:Key="CyclogramFolderContextMenu"
DataContext="{Binding Path=PlacementTarget.Tag, RelativeSource={RelativeSource Self}}">
<TextBlock Text="Do something" >
<TextBlock.InputBindings>
<MouseBinding Command="{Binding Path=(viewModels:someViewModel.SomeCommand)}" MouseAction="LeftClick" />
</TextBlock.InputBindings>
</TextBlock>
</ContextMenu>