gpt4 book ai didi

c# - 将 contextMenu 绑定(bind)到与 TreeView 不同的 View 模型

转载 作者:行者123 更新时间:2023-12-03 10:43:01 25 4
gpt4 key购买 nike

当我在 TreeView 项目上使用右键单击时,我想显示一个 contextMenu 项目。

之后,我想在单击 MenuItem 时使用命令,但我需要将命令与不同的 View 模型绑定(bind),并将命令参数与来自我的 TreeView 选定项的好 View 模型绑定(bind)。

所以目前,我有类似的东西:

<TreeView x:Name="TreeViewProtocolsAndEquipments" AllowDrop="True"
ItemsSource="{Binding ModuleParams}">

<TreeView.Resources>
<!-- CONTEXT MENU -->
<!-- Protocol -->
<ContextMenu x:Key="ContextMenuProtocol">
<MenuItem Header="Add new equipment" Command="{Binding AddNewEquipmentCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}}" CommandParameter="{Binding RelativeSource={RelativeSource Self}}">
<MenuItem.Icon>
<Image Source="Images/Add.png" />
</MenuItem.Icon>
</MenuItem>
<Separator />
</ContextMenu>

<!-- MODULE XXX -->
<!-- ModuleParam > xxx -->
<HierarchicalDataTemplate DataType="{x:Type xxx:ModuleParamXXXViewModel}" ItemsSource="{Binding ModuleItems}">
<TextBlock Text="XXX" Foreground="Green" ContextMenu="{StaticResource ContextMenuProtocol}"/>
</HierarchicalDataTemplate>
</TreeView.Resources>

</TreeView>

目前我的命令绑定(bind)到 xxx:ModuleParamXXXViewModel 如果我让 { binding }
  • 我可以将我的命令绑定(bind)到我的 ActivatedProtocolsAndEquipmentsTreeViewModel (此用户控件的数据上下文)并保持我的 xxx:ModuleParamXXXViewModel 的 CommandParameter (谁是我们触发右键单击以显示 contextMenu 的 TreeView 中的项目)?
  • 如何通过 MVVM 实践以其他方式实现这一目标?

  • 我也尝试过使用它,但也没有用:
    <MenuItem Header="Add new equipment" Command="{Binding Path=DataContext.AddNewEquipmentCommand, Source={x:Reference TreeViewProtocolsAndEquipments}}" CommandParameter="{Binding RelativeSource={RelativeSource Self}}">

    有了这个我得到对象引用未设置为对象的实例

    最佳答案

    UserControl不是 MenuItem 的视觉祖先自从 ContextMenu驻留在自己的可视化树中。

    绑定(bind)Tag TextBlock 的属性(property)到UserControl然后绑定(bind)Command PlacementTarget 的属性(property)的ContextMenu :

    <TreeView x:Name="TreeViewProtocolsAndEquipments" AllowDrop="True"
    ItemsSource="{Binding ModuleParams}">
    <TreeView.Resources>
    <!-- CONTEXT MENU -->
    <!-- Protocol -->
    <ContextMenu x:Key="ContextMenuProtocol">
    <MenuItem Header="Add new equipment"
    Command="{Binding PlacementTarget.Tag.DataContext.AddNewEquipmentCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ContextMenu}}"
    CommandParameter="{Binding}">
    <MenuItem.Icon>
    <Image Source="Images/Add.png" />
    </MenuItem.Icon>
    </MenuItem>
    <Separator />
    </ContextMenu>

    <!-- MODULE XXX -->
    <!-- ModuleParam > xxx -->
    <HierarchicalDataTemplate DataType="{x:Type xxx:ModuleParamXXXViewModel}" ItemsSource="{Binding ModuleItems}">
    <TextBlock Text="XXX" Foreground="Green"
    Tag="{Binding RelativeSource={RelativeSource AncestorType=UserControl}}"
    ContextMenu="{StaticResource ContextMenuProtocol}"/>
    </HierarchicalDataTemplate>
    </TreeView.Resources>
    </TreeView>

    关于c# - 将 contextMenu 绑定(bind)到与 TreeView 不同的 View 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45834396/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com