0

MenuItem我在资源字典中有以下模板

<Style x:Key="RecentMenuItem" 
       TargetType="{x:Type MenuItem}" 
       BasedOn="{StaticResource {x:Type MenuItem}}">
    <Setter Property="Command" Value="{Binding RelativeSource={RelativeSource 
        Mode=FindAncestor, AncestorType=MenuItem}, Path=DataContext.LoadRecentItemCommand}" />
    <Setter Property="CommandParameter" Value="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Header}"/>
    <Setter Property="HeaderTemplate" >
        <Setter.Value>
            <DataTemplate>
                <TextBlock>
                    <TextBlock.Text>
                        <MultiBinding StringFormat="{}{0}. {1}">
                            <Binding Path="(ItemsControl.AlternationIndex)" 
                                     RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type MenuItem}}"/>
                            <Binding Path="FullFileName"/>
                        </MultiBinding>
                    </TextBlock.Text>
                </TextBlock>
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>

这就像

<Menu>
    <MenuItem Header="FILE">
        ...
        <MenuItem Header="_Recent Studies" 
                  ItemsSource="{Binding RecentFiles}"
                  AlternationCount="{Binding Path=Items.Count, 
                                             Mode=OneWay, 
                                             RelativeSource={RelativeSource Self}}" 
                  ItemContainerStyle="{StaticResource RecentMenuItem}"/>
    <MenuItem/>

上的绑定Command不起作用(我可以通过 Snoop[dog] 看到这一点)。

上述命令绑定有什么问题,我该如何解决?

谢谢你的时间。

4

1 回答 1

1

我试过这个,它工作得很好......我在我的命令参数中得到了完整的文件名: 这里命令是在我的窗口的虚拟机中定义的,所以你必须相应地更新它(如果你使用了用户控件)。

     <Menu>
          <MenuItem Header="_Recent Studies" 
           ItemsSource="{Binding Files}"
           ItemContainerStyle="{StaticResource RecentMenuItem}"/>
    </Menu>


    <Style x:Key="RecentMenuItem" 
       TargetType="{x:Type MenuItem}" 
       BasedOn="{StaticResource {x:Type MenuItem}}">
            <Setter Property="Command" Value="{Binding DataContext.MyCommand, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" />
            <Setter Property="CommandParameter" Value="{Binding FullName}"/>
            <Setter Property="HeaderTemplate" >
                <Setter.Value>
                    <DataTemplate>
                        <TextBlock>
                            <TextBlock.Text>
                            <Binding Path="FullName"/>
                    </TextBlock.Text>
                        </TextBlock>
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </Style>
于 2013-09-17T13:10:26.610 回答