gpt4 book ai didi

c# - 无法将 WPF 菜单绑定(bind)到 ItemsSource

转载 作者:行者123 更新时间:2023-11-30 15:10:42 25 4
gpt4 key购买 nike

我想通过绑定(bind)到 ICommand 派生对象的列表来避免必须在 XAML 或代码中手动构建菜单。但是,我遇到了一个问题,即生成的菜单有两级菜单项(即每个 MenuItem 都包含在 MenuItem 中):

alt text

我的猜测是,这是因为 WPF 会自动为我的绑定(bind)生成一个 MenuItem,但我正在使用的“查看器”实际上已经是 MenuItem(派生自 MenuItem):

<ContextMenu
x:Name="selectionContextMenu"
ItemsSource="{Binding Source={x:Static OrangeNote:Note.MultiCommands}}"
ItemContainerStyleSelector="{StaticResource separatorStyleSelector}">
<ContextMenu.ItemTemplate>
<DataTemplate>
<Viewers:NoteCommandMenuItemViewer
CommandParameter="{Binding Source={x:Static OrangeNote:App.Screen}, Path=SelectedNotes}" />
</DataTemplate>
</ContextMenu.ItemTemplate>
</ContextMenu>

(ItemContainerStyleSelector 来自 http://bea.stollnitz.com/blog/?p=23,它允许我在我的绑定(bind)源中包含 Separator 元素。)

因此,菜单被绑定(bind)到 ICommand 的集合,并且每个项目的 CommandParameter 被设置为相同的全局目标(恰好是一个集合,但是那不重要)。

我的问题是,有没有什么方法可以绑定(bind)它,使 WPF 不会自动将每个项目包装在 MenuItem 中?

最佳答案

不幸的是,我发现解决此问题的最佳方法是为 MenuItems 使用样式,而不是 ItemTemplate。然后样式中的每个属性都可以绑定(bind)到对象的属性。像这样的东西,例如:

<Style x:Key="SelectionContextMenuStyle" TargetType="MenuItem">
<Setter Property="Header" Value="{Binding Path=Text}" />
<Setter Property="Command" Value="{Binding Path=Command}" />
<Setter Property="CommandParameter" Value="{Binding Path=Parameter}" />
</Style>

看起来 ItemTemplate 确实应该工作,而且它会是更好的方法,但这是我发现实际工作正常的唯一方法。

关于c# - 无法将 WPF 菜单绑定(bind)到 ItemsSource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3024613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com