我需要在上下文菜单中显示项目列表。除此之外,我需要在顶部显示常用项目(可由用户配置),然后是分隔符,然后是所有项目的标准列表。我知道,我可以在运行时将所有项目添加到上下文菜单中,但我也想探索不同的选项。问题是 - 是否有可能:
请注意,由于某些技术原因,我需要保留两个单独的列表。 我没有显示任何现有代码,因为此问题可能被视为一般性问题,可能适用于任何控制。
答案 0 :(得分:0)
第二个选项可以使用CompositeCollection
,但绑定功能有点暗淡(不能使用DataContext
,ElementName
或RelativeSource
){{3 }} - 结合
CollectionContainer.Collection
显示了两种可以绑定的方式。如果您无法处理这些限制,则必须在代码隐藏中创建复合集合。
答案 1 :(得分:0)
我会在ViewModel中管理我的菜单,而不是在XAML中。我的ViewModel将负责返回一个集合了标准Menu集合和自定义UserCollection的集合。
通常我使用null
值分隔项目,如果项目为空,则使用DataTrigger将模板绘制为分隔符。
这样的事情:
myMenu.AddRange(UserMenu);
myMenu.Add(null);
myMenu.AddRange(StandardMenu);
和XAML ......
<ContextMenu ItemsSource="{Binding MyMenu}">
<ContextMenu.Resources>
<Style TargetType="{x:Type MenuItem}">
<Setter Property="Template"
Value="{StaticResource MyMenuItemTemplate}" />
<Style.Triggers>
<DataTrigger Binding="{Binding }" Value="{x:Null}">
<Setter Property="Template"
Value="{StaticResource MySeparatorTemplate}" />
</DataTrigger>
</Style.Resources>
</Style>
</ContextMenu.Resources>
</ContextMenu>