wpf – 在Window的MenuItem上动态绑定到ViewModel命令
使用MVVM结构处理
WPF应用程序.
我的窗口显示一个菜单和当前的ViewModel.在Menu的MenuItem之一上,我想列出当前ViewModel中的一些命令.菜单中列出的命令将根据ViewModel而改变. 我得到了这个工作得很好,但风格搞砸了 – Command MenuItems在另一个菜单框或其他内容.我会附上截图. 我在ViewViewModel中包装了ViewModel的ICommand对象(在本例中为RelayCommands),它在菜单上公开了我想要的Command和Display字符串.这些CommandViewModel位于列表中:CurrentWorkspace.AdditionalOptionsCommands. 这是菜单的XAML.就像我说的那样,它起作用,它显示正确的项目并执行命令.显示是不正确的 – 任何人都可以告诉我为什么以及如何解决它?查看截图. <Menu> <MenuItem Header="_Additional Options..." ItemsSource="{Binding Path=CurrentWorkspace.AdditionalOptionsCommands}"> <MenuItem.ItemTemplate> <DataTemplate DataType="{x:Type vm:CommandViewModel}"> <MenuItem Header="{Binding Path=DisplayText}" Command="{Binding Path=Command}"/> </DataTemplate> </MenuItem.ItemTemplate> </MenuItem> <MenuItem Header="_Testing"> <MenuItem Header="This looks right" /> <MenuItem Header="This looks right" /> </MenuItem> </Menu> 目前的外观: 期望的外观: 解决方法
这是因为当您通过ItemsSource指定菜单项时,每个项目都会自动包装到MenuItem对象中.这样,DataTemplate(MenuItem元素)中定义的内容将被包装到另一个MenuItem中.
您需要做的不是定义DataTemplate,而是为MenuItem定义一个样式,您可以在其中设置与视图模型属性的绑定,并在父MenuItem上将此样式用作ItemContainerStyle: <Window.Resources> <Style x:Key="CommandMenuItemStyle" TargetType="{x:Type MenuItem}"> <Setter Property="Header" Value="{Binding Path=DisplayText}"/> <Setter Property="Command" Value="{Binding Path=Command}"/> </Style> </Window.Resources> ... <Menu> <MenuItem Header="_Additional Options..." ItemsSource="{Binding Path=CurrentWorkspace.AdditionalOptionsCommands}" ItemContainerStyle="{StaticResource CommandMenuItemStyle}"/> <MenuItem Header="_Testing"> <MenuItem Header="This looks right" /> <MenuItem Header="This looks right" /> </MenuItem> </Menu> 有关项容器如何与ItemsControl控件一起使用的详细说明,请参见http://drwpf.com/blog/2008/03/25/itemscontrol-i-is-for-item-container/. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 我想在Windows功能中启用Hyper-V,但没有Hyper-V选项
- windows – WaitForSingleObject是否放弃了线程的时间片?
- win10搭建个人https网站以及报错处理
- 当区域设置时,Windows C运行时toupper会变慢
- windows – 独立的Web应用程序
- 使用Skype For Web SDK记录呼叫,消息和视频
- windows – powershell脚本和subst命令
- Windows本地内核提权——Win32组件空指针漏洞(CVE-2018-81
- windows – Perl:“start perl.exe”与“perl.exe”有什么
- windows-server-2008 – 用于远程桌面登录失败的Windows事件