我想使用自定义对象的列表来生成菜单中的MenuItems列表,但是在该菜单的底部,我想要几个静态MenuItem始终显示。从逻辑上讲,这可以通过编程创建另一个绑定列表来完成,该列表总是在底部有这些MenuItems,但这让我觉得这是一种天真的方式来处理这个问题。我确信有一个更好的方法可以用我已经有的一些XAML巫术的列表来完成它,可能带有某种DataTemplate。任何指针?通过绑定部分填充MenuItem
回答
像McGarnagle说,你可以使用一个CompositeCollection。但是,您不需要为固定菜单项创建资源。您可以将它们直接放置在CompositeCollection中,如下所示:
<Menu>
<Menu.ItemsSource>
<CompositeCollection>
<CollectionContainer Collection="{Binding Path=MyItems}" />
<Separator/>
<MenuItem Header="Fixed item 1" />
<MenuItem Header="Fixed item 2" />
</CompositeCollection>
</Menu.ItemsSource>
</Menu>
简单,简洁,直接。我喜欢。 – Abion47
从来没有人指责我简洁,+1 – McGarnagle
使用带有两个子集合(生成的菜单项和静态项)的CompositeCollection
。
编辑应该是这个样子:
<Button Content="Test">
<Button.Resources>
<viewModel:MenuItemCollection x:Key="FixedMenuItems">
<MenuItem Header="Fixed Item" />
</viewModel:MenuItemCollection>
</Button.Resources>
<Button.ContextMenu>
<ContextMenu>
<ContextMenu.ItemsSource>
<CompositeCollection>
<CollectionContainer Collection="{StaticResource FixedMenuItems}" />
<CollectionContainer Collection="{Binding MyMenuItems}" />
</CompositeCollection>
</ContextMenu.ItemsSource>
</ContextMenu>
</Button.ContextMenu>
</Button>
哪里viewModel:MenuItemCollection
只是一个MenuItem
列表:
public class MenuItemCollection : ObservableCollection<MenuItem>
{
}
第二个编辑需要对这个
一个补丁修复。要绑定到视图模型中的“MyMenuItems”,有必要使用this answer中概述的代理。因此,而不是<CollectionContainer Collection="{Binding MyMenuItems}" />
,你会最终使用:
<CollectionContainer Collection="{Binding Path=DataContext.MyMenuItems,Source={StaticResource ProxyElement}}" />
并添加代理到视图的顶部:
<UserControl.Resources>
<FrameworkElement x:Key="ProxyElement" DataContext="{Binding}"/>
<UserControl.Resources>
<ContentControl Visibility="Collapsed" Content="{StaticResource ProxyElement}"/>
值得注意的是,代理代码的唯一原因是ContextMenu,它不是可视化树的一部分。标准的菜单控件不会有这个问题。 –
- 1. 如何通过绑定填充ObservableCollection
- 2. 填充NSMutableArrays定制部分
- 3. 未填充绑定的DataGrid
- 4. 从部分填充剃刀部分
- 5. 通过单击填充来定位ahref
- 6. SQLite-Net部分填充ListView
- 7. 填充部分视图
- 8. Android填充部分圆弧
- 9. 如何从填充部分
- 10. 生成部分填充表
- 11. 部分填充SVG背景
- 12. WPF MenuItem悬停样式填充问题
- 13. 如何在自动填充表的部分中划分绑定数组?
- 14. 通过RequestFactory填充ExtGWT树
- 15. 通过填充在IE11
- 16. Django - 通过request.user.somechoice_set.all()填充MultipleChoiceField()
- 17. 通过片段填充listview
- 18. 通过TCP填充数据
- 19. 通过多值填充DataGridView
- 20. 填充菜单通过JQuery
- 21. 通过下拉填充Div
- 22. 通过cshtml填充selectList
- 23. 通过TSQL填充aspnet_Profile表
- 24. 通过代码填充ITemplate
- 25. WPF MenuItem绑定问题
- 26. 绑定命令到MenuItem
- 27. CSS内部填充外部分区
- 28. 填充svg的内部部分
- 29. 导航栏顶部和底部填充通过CSS
- 30. UWP组合框不填充绑定值
不错的问题!我的直觉就是将两者无缝融合,以便为单一菜单提供视觉体验,并在Xaml中完成整个事情。我和你一样,如果有任何方法可以避免代码,并且在这种情况下。我会很感兴趣地看到答案! –
将MenuItems绑定到ObservableCollection是否适合您?通过在linq查询中使用OrderBy方法进行排序,您可以在列表底部提供静态对象。不知道这是你在找什么... –
Killingsworth
还是你只是谈论结合和整理两个集合? – Killingsworth