我的wpf menuitem命令不会触发

时间:2013-10-16 00:23:19

标签: wpf mvvm command menuitem

我正在使用WPF和MVVM。

我创建了两种不同的动态Menu方法,但两种方法都不起作用。

首先:

<DockPanel>
    <Menu DockPanel.Dock="Top" Height="auto" ItemsSource="{Binding MeuPaudi}">
        <Menu.Resources>
            <Style TargetType="{x:Type MenuItem}" BasedOn="{StaticResource {x:Type MenuItem}}">
                <Setter Property="Command" Value="{Binding Path=MenuSelecionado}" />
                <Setter Property="Header" Value="{Binding Texto}" />
                <Setter Property="ItemsSource" Value="{Binding MenuFilhos}"/>
            </Style>
        </Menu.Resources>
    </Menu>
</DockPanel>

第二

<Menu ItemsSource="{Binding MeuPaudi}">
    <Menu.ItemContainerStyle>
        <Style TargetType="{x:Type MenuItem}" BasedOn="{StaticResource {x:Type MenuItem}}">
            <Setter Property="Header" Value="{Binding Path=Texto}"/>
            <Setter Property="IsCheckable" Value="{Binding Path=IsCheckable}"/>
            <Setter Property="ItemsSource" Value="{Binding Path=MenuFilhos}"/>
            <Setter Property="Command"  Value="{Binding MenuSelecionado}" />
        </Style>
    </Menu.ItemContainerStyle>
</Menu>

我还创建了一个Button来测试命令是否正常工作:

<Button Command="{Binding Path=MenuSelecionado}"/>

它有效。有人能帮助我吗?

1 个答案:

答案 0 :(得分:1)

首先,您应确保绑定工作正常。检查绑定是否无效的快速方法是在绑定中添加虚拟转换器并在转换方法中添加断点。如果断点没有命中意味着,意味着你的绑定没有被解雇i,或者属性路径不正确或没有连接数据源。

你也应该删除Style:BasedOn。因为这不是必需的。以下代码应该可以工作。

<MenuItem Header="Main Menu" ItemsSource="{Binding MeuPaudi}">
    <MenuItem.ItemContainerStyle>
        <Style>
            <Setter Property="MenuItem.Header" Value="{Binding Texto}"/>
            <Setter Property="MenuItem.Command" Value="{Binding MenuSelecionado}"/>
        </Style>
    </MenuItem.ItemContainerStyle>
</MenuItem>