0

我正在尝试按名称将元素绑定到 ContextMenu 中的 MenuItem。要绑定的元素:

<UserControl x:Class="ATCheckerView.TestsPropagate"
         x:Name="TestPropagateRoot" ...

工作版本:

        <HierarchicalDataTemplate x:Key="SchemTemplate">
            <Button Command="{Binding ElementName=TestPropagateRoot, Path=DataContext.vclient.OpenInViewer}" />               
        </HierarchicalDataTemplate>

非工作:

           <HierarchicalDataTemplate x:Key="SchemTemplate">                
            <TextBlock Text="{Binding path}">
                <TextBlock.ContextMenu>
                    <ContextMenu>
                        <MenuItem Header="{Binding ElementName=TestPropagateRoot}"
                                  Command="{Binding ElementName=TestPropagateRoot, Path=DataContext.vclient.OpenInViewer}"
                                  CommandParameter="{Binding}" />
                    </ContextMenu>
                </TextBlock.ContextMenu>
            </TextBlock>
        </HierarchicalDataTemplate>
4

2 回答 2

1

是一个类似的问题和一个很好的答案,它展示了如何处理上下文菜单绑定的一些方法。

顺便说一句,大多数时候使用 PlacementTarget Binding,例如

        <TextBlock Text="{Binding path}">
            <TextBlock.ContextMenu>
                <ContextMenu>
                    <MenuItem Header="Test"
                              Command="{Binding Path=PlacementTarget.DataContext.vclient.OpenInViewer, 
                                                RelativeSource={RelativeSource AncestorType=ContextMenu}}"
                              CommandParameter="{Binding}" />
                </ContextMenu>
            </TextBlock.ContextMenu>
        </TextBlock>

编辑:如果您使用 .net4.0,{x:Reference TestPropagateRoot} 也可能是一个选项

于 2012-08-07T12:49:00.323 回答
0

我的解决方案是:

<HierarchicalDataTemplate x:Key="SchemTemplate">
            <TextBlock Text="{Binding path}" 
                       Tag="{Binding DataContext, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type local:TestsPropagate}}}">
                <TextBlock.ContextMenu>
                    <ContextMenu>
                        <MenuItem Header="Открыть для просмотра"
                                  Command="{Binding Path=PlacementTarget.Tag.vclient.OpenInViewer, 
                            RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ContextMenu}}"
                                  CommandParameter="{Binding}" />                                    
                    </ContextMenu>
                </TextBlock.ContextMenu>
            </TextBlock>
 </HierarchicalDataTemplate>
于 2012-08-07T14:12:10.997 回答