WPF中的动态菜单

Ejr*_*085 7 c# wpf

如何从具有Bindings和Observable集合的数据库表中将菜单项添加到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>
Run Code Online (Sandbox Code Playgroud)

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

codSubMenu | SubMenuColum | CommandColumn

1_ _ __ _ __ _ __ | SubMenu1 _ __ _ _ | SubMenu1Command 2 _ __ _ __ _ ___ | SubMenu2 _ ____ | _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>
Run Code Online (Sandbox Code Playgroud)

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

档案| 为MyMenu

退出| SubMenu1

___ | SubMenu2

cgu*_*del 8

使用ItemsSourceMenu和MenuItems(在样式中)的属性来绑定集合:

<Menu ItemsSource="{Binding YourCollection}" />
Run Code Online (Sandbox Code Playgroud)

<Style TargetType="MenuItem">
    <Setter Property="Header" Value="{Binding Path=Name}" />
    <Setter Property="ItemsSource" Value="{Binding Path=Children}" />
</Style>
Run Code Online (Sandbox Code Playgroud)

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

  1. 像这样添加一个setter到MenuItem的模板:

    <Setter Property="Command" Value="{Binding Path=Command}" />
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将此结构用于MenuItem视图模型:

    public class BindableMenuItem
    {
         public string Name { get; set; }
         public BindableMenuItem[] Children { get; set; }
         public ICommand Command { get; set; }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将根项添加到集合中,BindableMenuItems并将此集合绑定到菜单.