2016-07-27 8 views
0

コンテキストメニューのコマンドをクリックすると、ツリービュー内の項目に対してコマンドを実行できるようになります。アイテムが特定のタイプ(xxTreeViewItemが2つのサブタイプを持つインターフェース)である場合にのみ、より具体的になります。アイテムをTreeViewの内部にあるコンテキストメニューにコマンドをバインドする方法はありますか?

<Grid Name="Root" commonExtensions:EnterKeyUpdateExtension.IsEnabled="True"> 

    <StackPanel Orientation="Vertical" Grid.Row="0"> 
     <Button Content="Center on" Command="{Binding Path=CenterOnCommand}" Margin="5,10,5,0"/> 
    </StackPanel> 
     <Grid> 
      <TreeView Grid.Row="0" Name="xxTreeView" DataContext="{Binding Path=xxViewModel}" ItemsSource="{Binding Path=Items}"> 
       <TreeView.ItemContainerStyle> 
        <Style TargetType="{x:Type TreeViewItem}"> 
         <Setter Property="ContextMenu"> 
          <Setter.Value> 
           <ContextMenu> 
            <MenuItem Header="Center On" Command="{Binding CenterOnCommand}"/> 
           </ContextMenu> 
          </Setter.Value> 
         </Setter> 
        </Style> 
       </TreeView.ItemContainerStyle> 
       <TreeView.ItemTemplate> 
        <HierarchicalDataTemplate ItemsSource="{Binding Path=Items}" DataType="{x:Type localViewItems:xxTreeViewItem}"> 
         <TextBlock Text="{Binding Name}" VerticalAlignment="Center"/> 
        </HierarchicalDataTemplate> 
       </TreeView.ItemTemplate> 
      </TreeView> 

上部のボタンのコマンドは機能しますが、コンテキストメニューでは機能しません。私はいくつかの束縛と祖先の発見を試みたが、どれもうまくいきませんでした。 XAMLのみのソリューションはありますか?

答えて

1

ContextMenuはビジュアルツリーに属していないため、TreeViewのDataContextを継承しません。だから、PlacementTargetプロパティを使用してのContextMenuにそれを渡す必要があります:私はそれはまだ働いていない、それはあなた

+0

役立つことを願って

<TreeView.ItemContainerStyle> <Style TargetType="{x:Type TreeViewItem}"> <Setter Property="Tag" Value="{Binding RelativeSource={RelativeSource AncestorType=TreeView}, Path=DataContext}"></Setter> <Setter Property="ContextMenu"> <Setter.Value> <ContextMenu DataContext="{Binding Path=PlacementTarget.Tag, RelativeSource={RelativeSource Self}}"> <MenuItem Header="Center On" Command="{Binding CenterOnCommand}" /> </ContextMenu> </Setter.Value> </Setter> </Style> </TreeView.ItemContainerStyle> 

、コマンドCenterOnCommandはxxEditorViewModelです。 TreeViewで使用されるxxViewModelは、xxEditorViewModelのプロパティです。 SetterのAncestorTypeをUserControl(上端)に設定して解決しました。ありがとう! – n0win0u

+0

偉大な@ n0win0u、私はあなたの問題を解決してうれしい –

関連する問題