2

白天好。

我在创建ContextMenu. TreeView问题很简单。我想向树视图添加新项目,单击树视图项目上的人民币并选择上下文菜单命令。
我知道我需要向我的命令传递一个包含父项的参数。但。我需要我可以人民币点击任何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 中?

问候,德米特里。

4

3 回答 3

2

Hi this is just a way you can bind

        <ContextMenu Name="MyContextMenu" DataContext="{Binding PlacementTarget,RelativeSource={RelativeSource Self}}">
                <MenuItem Header="Add" Command="{Binding DataContext.AddNewItemCommand}" CommandParameter="{Binding }"/>
            </ContextMenu>

I hope this will help.

于 2013-02-03T13:56:44.273 回答
2

感谢道德逻辑和他关于 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,而是树的 itemsourse 中使用的 MainItems 的集合。

问候,德米特里。
希望这个经验对人们有所帮助。

于 2013-02-06T14:15:57.603 回答
0

您可以使用此处找到的代码来检测右键单击下的项目(并选择它以获得积极的视觉反馈)。

请点击此链接,了解 PlacementTarget 在@ethicallogics 提供的解决方案中的作用。

希望您可以结合使用这两个答案来解决您的问题。

于 2013-02-03T22:03:18.823 回答