MenuItem中的命令绑定失败

时间:2013-09-17 12:55:27

标签: wpf binding command menuitem

我在资源字典中有以下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]看到这一点)。

以上命令绑定有什么问题?如何解决?

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

我尝试了这个并且它运行得很好...我在命令参数中获得了完整的文件名:这里的命令在我的窗口的VM中定义,所以你必须相应地更新它(如果你使用了usercontrol)。 / p>

     <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>