我有一个带有分层数据模板的TreeView(2级)。我在树视图的第一级创建了一个上下文菜单,有3个级别。我想将我的视图模型的命令绑定到上下文菜单的第二级。不幸的是,我只能在我的模型中使用命令时才能使用它,这不是我想做的...如果可能的话,我想在XAML中完成所有操作。
我已经测试了here和here给出的纯xaml解决方案。 在设计师中," Tag"带有下划线的蓝色说法
"Cannot resolve Property Tag in data context of type System.Windows.UIElement"或者,如果我使用" Parent.PlacementTarget ....",设计师会告诉我
PlacementTarget cannot be resolved in the data context of type System.Windows.DependencyObject.代码是可编译的,但我的命令永远不会到达。
这就是我所拥有的:
在ResourceDictionary中:
<DataTemplate DataType="{x:Type viewModel:UpdateToolViewModel}">
<view:UpdateToolView/>
</DataTemplate>
<DataTemplate x:Key="ToolNameDataTemplate" DataType="{x:Type src:Element}">
<Grid>
<TextBlock Text="{Binding Path=NameProperty.Value}" FontSize="12" />
</Grid>
</DataTemplate>
<HierarchicalDataTemplate x:Key="ToolGroupsDataTemplate" ItemsSource="{Binding Elements}" DataType="{x:Type src:ElementGroup}" ItemTemplate="{StaticResource ToolNameDataTemplate}">
<TextBlock Text="{Binding Path=TextProperty.Value}" FontSize="14" FontWeight="Bold" Tag="{Binding ElementName=UpdateToolControl}">
<TextBlock.ContextMenu>
<ContextMenu>
<MenuItem Header="Add Tool" ItemContainerStyle="{StaticResource ToolGroupContextMenuToolsItemStyle}" >
<MenuItem.ItemsSource>
<CompositeCollection>
<MenuItem Header="Add New ..." Command="{Binding PlacementTarget.Tag.DataContext.AddToolCommand, RelativeSource={RelativeSource FindAncestor, AncestorType=ContextMenu}}" />
<CollectionContainer Collection="{Binding Source={StaticResource AddToolContextMenuSource}}"/>
</CompositeCollection>
</MenuItem.ItemsSource>
</MenuItem>
</ContextMenu>
</TextBlock.ContextMenu>
</TextBlock>
</HierarchicalDataTemplate>
在UserControl中:
<UserControl x:Class="...UpdateToolView" ... Name="UpdateToolControl">
<TreeView Name="ToolTreeView" ItemsSource="{Binding AllElementsInGroups}"
ItemTemplate="{StaticResource ToolGroupsDataTemplate}"
ItemContainerStyle="{StaticResource ToolTreeViewItemStyle}"/>
</UserControl>
我已经在我的模型中使用命令,在我的视图模型中调用一个方法。不好,但我似乎并没有让它以不同的方式工作。
答案 0 :(得分:1)
我刚刚开始,试图找出如何向CollectionContainer项添加命令,当我发现这个:CollectionContainer Binding(对不起,它的德语,但xaml代码是相关的东西)< / p>
现在我已经在MenuItem
的{{1}}中添加了命令,突然整个事情都有效(尽管&#34; Tag&#34;在设计师中仍然带有蓝色下划线):
<converter:ElementToToolTipConverter x:Key="ElementToToolTipConverter"/>
<Style x:Key="ToolGroupContextMenuToolsItemStyle" TargetType="{x:Type MenuItem}">
<Setter Property="Header" Value="{Binding Name}"/>
<Setter Property="ItemsSource" Value="{Binding Children}"/>
<Setter Property="ToolTip" Value="{Binding Element, Converter={StaticResource ElementToToolTipConverter}}"/>
<Setter Property="Command" Value="{Binding PlacementTarget.Tag.DataContext.AddToolCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContextMenu}}}"/>
<Setter Property="CommandParameter" Value="{Binding}"/>
</Style>
有时,它已经有助于思考其他事情...... :)