WPF mvvm通过命令发送TreeViewItem的绑定(bind)元素

标签 wpf mvvm treeview contextmenu

白天好。

我在创建 TreeViewContextMenu 时遇到问题。问题很简单。我想向 TreeView 添加新项目,单击 TreeView 项目上的人民币并选择上下文菜单命令。
我知道我需要向命令传递一个包含父项的参数。但。我需要我可以人民币点击任何 TreeView 项目,而不仅仅是选择。
这是问题:
如何将treeviewitem的绑定(bind)数据传递给我的命令。

这是类诊断 enter image description here

这是 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/

相关文章:

c# - WPF 只能打开一个窗口?

c# - 在 ViewModel 中使用 CollectionViewSource 的正确方法

android - 无法创建 AndroidViewModel 的实例

c# - MVVM 中的什么使它对托管 WPF 和 Silverlight 特别有吸引力,但对 native C++ 却没有吸引力?

c# - 如何将 TreeView 序列化为 xml 并将 xml 反序列化回 TreeView?

wpf - wpf什么时候调用ValueConverter的Convert方法

c# - 具有更改哈希码的 WPF 列表框和项目

c# - WPF TreeView HierarchicalDataTemplate 获取 TreeViewItem

.net - .NET 中 TreeView 的延迟加载

c# - 如何绑定(bind)我的 ListView 组合框的选定项目