白天很好。
我在创建ContextMenu
TreeView
时出现问题。问题很简单。我想在树视图中添加新项目,在treeviewitem上单击RMB并选择上下文菜单命令
我知道我需要将包含父项的参数传递给我的命令。但。我需要人民币点击任何treeviewitem,而不仅仅是选中。
接下来是问题:
如何将treeviewitem的绑定数据传递给我的命令。
这是类诊断
这是Xaml(编辑)
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Item.Children}">
<TextBlock Text="{Binding Item.Code}" HorizontalAlignment="Stretch">
<TextBlock.ContextMenu>
<ContextMenu Name="MyContextMenu" DataContext="{Binding PlacementTarget,RelativeSource={RelativeSource Self}}">
<MenuItem Header="{Binding DataContext.ToString()}" Command="{Binding DataContext.Item.AddNewItemCommand}" CommandParameter="{Binding}"/>
</ContextMenu>
</TextBlock.ContextMenu>
</TextBlock>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
但它甚至没有打电话给我。
private void AddNewItem(object toItem)
{
if (toItem == null)
return;
ItemViewModel item = toItem as ItemViewModel;
ItemMaterialModel itemMaterial = new ItemMaterialModel(ItemModel.CreateNewItem());
ItemMaterialViewModel itemMaterialViewModel = new ItemMaterialViewModel(itemMaterial);
item.Children.Add(itemMaterialViewModel);
}
也许我的命令错误的ViewModel?
问候,德米特里。
答案 0 :(得分:2)
嗨,这只是一种你可以绑定的方式
<ContextMenu Name="MyContextMenu" DataContext="{Binding PlacementTarget,RelativeSource={RelativeSource Self}}">
<MenuItem Header="Add" Command="{Binding DataContext.AddNewItemCommand}" CommandParameter="{Binding }"/>
</ContextMenu>
我希望这会有所帮助。
答案 1 :(得分:2)
感谢ethicallogics和他关于PlacementProperty的信息,我在这里修改了我的Xaml:
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Item.Children}">
<TextBlock Text="{Binding Item.Code}" HorizontalAlignment="Stretch">
<TextBlock.ContextMenu>
<ContextMenu DataContext="{Binding PlacementTarget.DataContext,RelativeSource={RelativeSource Mode=Self}}">
<MenuItem
Header="{Binding Item.Code}"
Command="{Binding Item.AddNewItemCommand}"
CommandParameter="{Binding Item}"/>
</ContextMenu>
</TextBlock.ContextMenu>
</TextBlock>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
在我的StructureManagerViewModel
中,我制作的不是简单的MainItem,而是在树的项目中使用的MainItems的集合。
问候,德米特里 希望这种经历能够帮助人们。
答案 2 :(得分:0)