c# - WPF 中的动态菜单

标签 c# wpf

如何从具有绑定(bind)和可观察集合的数据库表向 WPF 中的菜单控件(而非上下文菜单)添加菜单项?。我有这个菜单:

<Menu HorizontalAlignment="Left" Height="27" VerticalAlignment="Top" Width="649">
    <MenuItem Header="_File">
       <MenuItem Header="_Exit" Command="{Binding ExitCommand}"/>
       </MenuItem>
    <MenuItem Header="_MyMenu">
       <MenuItem Header="_SubMenu1" Command="{Binding  SubMenu1Command}" />
       <MenuItem Header="_SubMenu2" Command="{Binding  SubMenu2Command}" />
    </MenuItem>
</Menu>

“SubMenu1”和“_SuMenu2”是数据库表中的值:

鳕鱼子菜单 |子菜单列 |命令列

1__________|SubMenu1 _____|子菜单1命令 2__________|子菜单2_____|_SubMenu2Command

我需要这样的东西:

<Menu HorizontalAlignment="Left" Height="27" VerticalAlignment="Top" Width="649"
    ItemsSource="{Binding ObservableCollectionMenu}">
    <MenuItem Header="_File">
       <MenuItem Header="_Exit" Command="{Binding ExitCommand}"/>
    </MenuItem>
    <MenuItem Header="_MyMenu">
        <MenuItem Header="{Binding  ObservableCollectionMenu.SubMenuColumn}" Command="{Binding  ObservableCollectionMenu.CommandColumn}" />
    </MenuItem>
</Menu>

当我运行应用程序时,当我按下选项文件和我的菜单时,菜单必须显示:

文件 |我的菜单

退出 |子菜单1

___|子菜单2

最佳答案

使用菜单的 ItemsSource 属性和 MenuItems(以一种样式)绑定(bind)您的集合:

<Menu ItemsSource="{Binding YourCollection}" />

<Style TargetType="MenuItem">
    <Setter Property="Header" Value="{Binding Path=Name}" />
    <Setter Property="ItemsSource" Value="{Binding Path=Children}" />
</Style>

编辑:对于命令绑定(bind),请执行以下操作:

  1. 将这样的 setter 添加到 MenuItem 的模板中:

    <Setter Property="Command" Value="{Binding Path=Command}" />
    
  2. 将此结构用于 MenuItem View 模型:

    public class BindableMenuItem
    {
         public string Name { get; set; }
         public BindableMenuItem[] Children { get; set; }
         public ICommand Command { get; set; }
    }
    
  3. 将根项添加到 BindableMenuItems 集合中,并将该集合绑定(bind)到菜单。

关于c# - WPF 中的动态菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19298992/

相关文章:

c# - Parallel.ForEach仅在未运行代码时才在启动时执行两次吗?

c# - 自定义排序排序

c# - 虚函数

c# - 将WPF与MVVM架构一起使用以创建与要轮询的设备相对应的动态GUI

c# - 组合框样式显示评级和描述 WPF

c# - 用换行检测 TextBlock 中的换行符数?

wpf - 如何从当前组件资源中引用静态资源?

c# - 使用 IPageRouteModelConvention 时获取版本

c# - 将字节数组插入 SQL Server 数据库表

c# - TextBlock 作为复选框内容不显示