【问题标题】:WPF contextmenu bindingWPF 上下文菜单绑定
【发布时间】:2012-08-29 07:23:01
【问题描述】:

似乎无法将我的上下文菜单中的菜单项绑定到我的视图模型中的命令。我知道上下文菜单不在可视树中。出于测试目的,我在一个按钮中绑定了两次相同的命令。第一个绑定有效,但我可以在上下文菜单中获得第二个绑定来绑定。我可以在输出中看到绑定错误。有人知道吗?

<HierarchicalDataTemplate DataType="{x:Type inf:OSiteEquipment}" ItemsSource="{Binding Path=SubSystems, Converter={StaticResource subsystemConverter}}"  >
                <Button HorizontalContentAlignment="Left"
                        Command="{Binding DataContext.CommandOpenSelected, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}"
                        CommandParameter="{Binding}">

                    <TextBlock Text="{Binding Path=PartData.Name}" TextTrimming="CharacterEllipsis" />
                    <Button.ContextMenu>
                        <ContextMenu>                                                                         

     <MenuItem Header="Add Category"  Command="{Binding Path=Parent.PlacementTarget.Tag.CommandOpenSelected, RelativeSource={RelativeSource AncestorType=ContextMenu}}" />
                        </ContextMenu>

                    </Button.ContextMenu>
                </Button>
            </HierarchicalDataTemplate>

【问题讨论】:

  • 能否给出绑定错误?
  • System.Windows.Data 错误:4:找不到与引用'RelativeSource FindAncestor,AncestorType='System.Windows.Controls.ItemsControl',AncestorLevel='1''的绑定源。绑定表达式:路径=垂直内容对齐;数据项=空;目标元素是'TreeViewItem'(名称='');目标属性是“VerticalContentAlignment”(类型“VerticalAlignment”)

标签: wpf contextmenu


【解决方案1】:

只需删除数据绑定路径中的“父级”:

<HierarchicalDataTemplate DataType="{x:Type inf:OSiteEquipment}" ItemsSource="{Binding Path=SubSystems, Converter={StaticResource subsystemConverter}}"  >
    <Button HorizontalContentAlignment="Left"
            Command="{Binding DataContext.CommandOpenSelected, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}"
            CommandParameter="{Binding}">

        <TextBlock Text="{Binding Path=PartData.Name}" TextTrimming="CharacterEllipsis" />
        <Button.ContextMenu>
            <ContextMenu>
                <MenuItem Header="Add Category"  Command="{Binding Path=PlacementTarget.Command, RelativeSource={RelativeSource AncestorType=ContextMenu}}" />
            </ContextMenu>
        </Button.ContextMenu>
    </Button>
</HierarchicalDataTemplate>

【讨论】:

  • 对不起,新错误是我的错。 System.Windows.Data 错误:40:BindingExpression 路径错误:在“对象”“按钮”(名称=“”)上找不到“CommandOpenSelected”属性。 BindingExpression:Path=PlacementTarget.CommandOpenSelected; DataItem='ContextMenu' (Name='');目标元素是'MenuItem'(名称='');目标属性是“Command”(输入“ICommand”)
  • 顺便感谢您的帮助。这会起作用,但我最终会在上下文菜单中有额外的命令,所以我仍然需要绑定到用户控件的数据上下文。
【解决方案2】:
  1. 您已经通过相对源找到了Parent -> 省略路径中的Parent
  2. 你甚至没有在PlacementTarget上设置TagButton)->分别设置

【讨论】:

    猜你喜欢
    • 2014-07-20
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    • 2011-12-08
    • 2017-05-26
    • 1970-01-01
    • 1970-01-01
    • 2016-09-17
    相关资源
    最近更新 更多