2016-12-06 4 views
0

私はWPFでデータバインドされた階層メニューを持っています。すべての項目が表示されますが、コマンドは子を持つ項目ではなく、メニューのリーフに対してのみ起動します。私は子メニューを展開することによってコマンドがオーバーライドされていると推測しています... 子を持つメニュー項目に対してもコマンドを実行するにはどうすればよいですか?私が今持っている何WPF - 子を持つメニューアイテムにコマンドを与えるにはどうすればいいですか?

は、私がquestion with a similar nameを見つけましたが、状況は異なっており、それがとにかく良い答えを持っていない

<UserControl ...> 
    <WrapPanel> 
     <Menu> 
      <Menu.Resources> 
       <Style x:Key="MenuItemStyle" TargetType="MenuItem" d:DataContext="{d:DesignInstance local:TreeItem}"> 
        <Setter Property="Command" Value="{Binding DataContext.AddColumnCommand, RelativeSource={RelativeSource AncestorType=UserControl}}"/> 
        <Setter Property="CommandParameter" Value="{Binding}"/> 
       </Style> 
      </Menu.Resources> 
      <MenuItem Header="Add ▼" ItemsSource="{Binding AvailableFields}"> 
       <MenuItem.ItemTemplate> 
        <HierarchicalDataTemplate DataType="{x:Type local:TreeItem}" ItemsSource="{Binding NestedItems}" ItemContainerStyle="{StaticResource MenuItemStyle}"> 
         <ContentPresenter Content="{Binding Annotation}"/> 
        </HierarchicalDataTemplate> 
       </MenuItem.ItemTemplate> 
      </MenuItem> 
     </Menu> 
    </WrapPanel> 
</UserControl> 

です。

答えて

0

すべてのアイテムが表示されますが、コマンドは子を持つアイテムではなく、メニューのリーフに対してのみ起動します。

子供がいるMenuItemをクリックすると、子アイテムのサブメニューが展開されるため、これは予想される動作です。コマンドを実行しません。

あなたは子アイテムを展開し、MenuItemのののPreviewMouseLeftButtonDownイベントを扱うことができるコマンドを実行する場合:

<Style TargetType="{x:Type MenuItem}"> 
    <Setter Property="Command" Value="{Binding DataContext.AddColumnCommand, RelativeSource={RelativeSource AncestorType=UserControl}}"/> 
    <EventSetter Event="PreviewMouseLeftButtonDown" Handler="OnMouseDown" /> 
</Style> 

-

private void OnMouseDown(object sender, MouseButtonEventArgs e) 
{ 
    MenuItem mi = sender as MenuItem; 
    if (mi != null && mi.Command != null && mi.HasItems) 
     mi.Command.Execute(mi.CommandParameter); 
} 

注コード - でイベントを処理すること同じビューのXAMLマークアップから呼び出すのではなく、コードビハインドからビューモデルのコマンドを呼び出すだけなので、ビューの背後にMVVMパターンが実際にはありません。しかし、このアプローチが気に入らない場合は、添付の動作を使用できます:https://www.codeproject.com/articles/28959/introduction-to-attached-behaviors-in-wpf

関連する問題