wpf - 如何将顶级 MenuItem 上的 Visibility 属性绑定(bind)到 ViewModel

标签 wpf xaml data-binding mvvm menu

我正在使用以下 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/

相关文章:

通过代码隐藏的 C# 数据绑定(bind)不适用于 TextBox 中的 Text 属性

wpf - 如何在 WPF 中创建 "Accordion Widget"?

winforms - 您是否将对象字段数据绑定(bind)到表单控件?

javascript - Angular4 真的是双向数据绑定(bind)吗?

c# - 如何正确地为 XAML 中的数据绑定(bind)添加前缀(或后缀)?

wpf - 在代码中加载BitmapImage

c# - 是否可以在 WPF 应用程序中连接到 BTLE 设备?

c# - BackgroundWorker 进程需要引发要在主 (UI) 线程上处理的自定义事件

c# - ListView 项目内的 UWP 按钮

css - Angular:ngClass 属性中的条件始终被视为 true