我正在使用以下HierarchicalDataTemplate将MenuViewModel的集合绑定到Menu控件:
<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>
这一切都运行正常,但我要求根据特定状态删除某些菜单项(例如,如果编辑屏幕处于活动状态,我可能只想显示'编辑'顶级菜单)我在MenuViewModel上有一个IsVisible属性,它又通过booleanToVisibility转换器绑定到MenuItem的Visibility属性(在HierarchialDataTameplate.ItemContainerStyle中设置,我认为这就是我的问题所在)
这对子菜单项有效,但对顶级菜单项没有影响。
我已经找到了一个显示问题的快速示例here(VS2010 .sln)
我的问题是:如何将顶级MenuItem上的visibility属性绑定到ViewModel?
答案 0 :(得分:4)
<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}"/>
答案 1 :(得分:1)
您需要在更高级别应用该样式,例如Menu.ItemContainerStyle
,这应该只影响最高级别,因此如果您想要影响所有项目,请通过Style.TargetType
通过Menu.Resources
隐式应用它。