0

我正在使用 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}"/>

它有效。有人能帮我吗?

4

1 回答 1

1

首先,您应该确保您的绑定工作正常。检查绑定是否不起作用的快速方法是在绑定中添加一个虚拟转换器并在转换方法中放置一个断点。如果断点未命中意味着,意味着您的绑定没有被触发,即属性路径不正确或未附加数据源。

您还应该删除 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>
于 2013-10-16T00:54:17.107 回答