7

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>

「SubMenu1」と「_SuMenu2」は、データベース テーブルの値です。

codSubMenu | サブメニュー列 | コマンド列

1_ _ _ _ _ _ __ | サブメニュー1 _ _ _ _ | 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>

アプリを実行すると、オプションの [ファイル] と [MyMenu] を押すと、メニューに次のように表示される必要があります。

ファイル | マイメニュー

終了 | サブメニュー1

___ | サブメニュー2

4

3 に答える 3

0

XAML には簡単な解決策がありません。特定のプロファイルに従って、データベースからサブメニュー項目を取得する必要がありました。一部のユーザーはすべての項目を持っていましたが、2 つまたは 3 つの項目しか持っていませんでした。ユニークな方法は、アイテムを無効にして XAML でメニューを作成し、メニュー参照を ViewModel (MVVM アプリの場合) に渡し、ObservableCollection と比較すると、等しいアイテムのみが有効になります。

<menu horizontalalignment="Left" height="27" verticalalignment="Top" width="649" name="menu1">
      <menuitem header="_File">
          <menuitem header="_Exit" command="{Binding ExitCommand}" />
      </menuitem>
      <menuitem header="_MyMenu">
          <menuitem header="_SubMenu1" command="{Binding  Command1}" isenabled="False" />
          <menuitem header="_SubMenu2" command="{Binding  Command2}" isenabled="False" />
      </menuitem>
</menu>

ビューモデル:

for (int i = 0; i < ObservableCollectionMenu.Count; i++)
{

    for (int j = 0; j < ((MenuItem)menu1.Items[1]).Items.Count; j++)
    {
         if (((MenuItem)((MenuItem)menu1.Items[1]).Items[j]).Header.ToString().Equals(ObservableCollectionMenu[i].SubMenuColumn))
         {
            ((MenuItem)((MenuItem)menu1.Items[1]).Items[j]).IsEnabled = true;
             break;
         }
    }
}

私の質問に答えてくれたすべての人に感謝します。

于 2013-10-10T19:55:11.663 に答える