How can I bind the Visibility property on a top level MenuItem to a ViewModel
我正在使用以下HierarchicalDataTemplate将MenuViewModels的集合绑定到Menu控件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <HierarchicalDataTemplate DataType="{x:Type common:MenuViewModel}" ItemsSource="{Binding Path=Children}"> <HierarchicalDataTemplate.ItemContainerStyle> <Style TargetType="MenuItem"> <Setter Property="Command" Value="{Binding Command}"/> <Setter Property="Visibility" Value="{Binding IsVisible, Converter={StaticResource ResourceKey=boolToCollapsedConverter}}" /> </Style> </HierarchicalDataTemplate.ItemContainerStyle> <ContentPresenter Content="{Binding Name}" RecognizesAccessKey="True" /> </HierarchicalDataTemplate> |
一切正常,但是我需要根据特定状态删除某些菜单项(例如,如果编辑屏幕处于活动状态,我可能只想显示" Edit"顶级菜单)我在MenuViewModel上有一个IsVisible属性,该属性又通过booleanToVisibility转换器绑定到MenuItem的Visibility属性(在HierarchialDataTameplate.ItemContainerStyle中设置,我认为这是我的问题所在)。
这在子菜单项上工作正常,但对顶级菜单项没有影响。
我已经整理了一个简单的示例,在这里显示了问题(VS2010 .sln)
我的问题是:如何将顶级MenuItem的可见性属性绑定到ViewModel?
1 2 3 4 5 6 7 8 9 | <Style x:Key="MenuItemStyle" TargetType="{x:Type MenuItem}"> <Setter Property="Command" Value="{Binding Command}"/> <Setter Property="Visibility" Value="{Binding IsVisible, Converter={StaticResource ResourceKey=boolToCollapsedConverter}}" /> </Style> snip... <Menu DockPanel.Dock="Top" ItemsSource="{Binding Path=MainMenu}" ItemContainerStyle="{DynamicResource MenuItemStyle}"/> |
您需要在更高级别上应用样式,例如