白天好。
我在创建 TreeView
的 ContextMenu
时遇到问题。问题很简单。我想向 TreeView 添加新项目,单击 TreeView 项目上的人民币并选择上下文菜单命令。
我知道我需要向命令传递一个包含父项的参数。但。我需要我可以人民币点击任何 TreeView 项目,而不仅仅是选择。
这是问题:
如何将treeviewitem的绑定(bind)数据传递给我的命令。
这是类诊断
这是 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 中?
问候,德米特里。
最佳答案
嗨,这只是您可以绑定(bind)的一种方式
<ContextMenu Name="MyContextMenu" DataContext="{Binding PlacementTarget,RelativeSource={RelativeSource Self}}">
<MenuItem Header="Add" Command="{Binding DataContext.AddNewItemCommand}" CommandParameter="{Binding }"/>
</ContextMenu>
我希望这会有所帮助。
关于WPF mvvm通过命令发送TreeViewItem的绑定(bind)元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14673073/