如何正确绑定菜单项?

8

我如何正确绑定一个动态创建的菜单项列表。我尝试了几种方法,但似乎都不起作用。我可以得到正确的名称列表,但我的ViewSwitchCommand似乎没有正确触发。

<MenuItem Foreground="White" Header="Names" ItemsSource="{Binding Player.ToonNames}" Command="{Binding ViewSwitchCommand}" CommandParameter="{Binding Header}"/>

然而,如果我不动态地这样做,而是像这样做,那么一切都能正常工作,可以让它正常工作。
<MenuItem Foreground="White" Header="Names">
<MenuItem Foreground="Black" Header="Chat" Command="{Binding ViewSwitchCommand}"     CommandParameter="player1" />
<MenuItem Foreground="Black" Header="Craft" Command="{Binding ViewSwitchCommand}" CommandParameter="player2" />
</MenuItem>

命令参数需要一个字符串,不确定是否是这个问题...希望这只是我忽略的简单问题。
1个回答

16

这段代码对我来说可行:

<MenuItem Header="Names" ItemsSource="{Binding Player.ToonNames}">
    <MenuItem.ItemContainerStyle>
        <Style TargetType="MenuItem">
            <Setter Property="Command" Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=MenuItem}, Path=DataContext.ViewSwitchCommand}" />
            <Setter Property="CommandParameter" Value="{Binding}" />
        </Style>
    </MenuItem.ItemContainerStyle>
</MenuItem>

先生,我们已经更近一步了。我现在正在执行命令,但是当ToonNames列表没有被填充时......看起来它正在为正确数量的名称创建空间,只是没有标题信息。可能有帮助告诉您ToonNames是ObservableCollection<string>类型的。 - poco
1
@ poco,你应该一开始就说了,我没有水晶球知道你的代码长什么样。请查看更新后的答案。 - svick
5
水晶球非常有帮助,先生,您应该研究一下!我还没有测试过您的最新代码,但是从您的第一个编辑开始就能使其正常运行了。感谢您的帮助。 - poco

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接