我正在使用以下 HierarchicalDataTemplate 将 MenuViewModel 集合绑定(bind)到 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 转换器绑定(bind)到 MenuItem 的 Visibility 属性(在 HierarchialDataTameplate.ItemContainerStyle 中设置,我认为这是我的问题所在)
这适用于子菜单项,但对顶级菜单项没有影响。
我敲了一个简单的例子来显示问题here (VS2010 .sln)
我的问题是:如何将顶级 MenuItem 上的可见性属性绑定(bind)到 ViewModel?
最佳答案
<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}"/>
关于wpf - 如何将顶级 MenuItem 上的 Visibility 属性绑定(bind)到 ViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7352389/