2017-01-11 28 views
3

column Indexを取得し、CommandParameterで渡したいと思います。context menuData grid column headerにあります。右クリックでデータグリッドの列インデックスを取得するには? MVVM WPF

<DataGrid.Resources> 
    <ContextMenu x:Key="DataGridColumnHeaderContextMenu"> 
      <MenuItem Header="Freez Column" 
        Command="{Binding DataContext.FreezColumnCommand, RelativeSource={RelativeSource AncestorType=DataGrid}}" 
        CommandParameter="{Binding}" /> 
    </ContextMenu> 
    <Style TargetType="{x:Type DataGridColumnHeader}"> 
      <Setter Property="ContextMenu" Value="{StaticResource DataGridColumnHeaderContextMenu}" /> 
    </Style> 
</DataGrid.Resources> 

IはCommandParameterBindingを渡すことによって、オブジェクト全体を渡すために試みたが、それは唯一のヘッダテキストを通過します。

RelateveSource AncestorType=DataGridColumnを試してみるとまだ分かりませんでした。

編集:

のDataGridコード:

<DataGrid ItemsSource="{Binding MyList}" HorizontalScrollBarVisibility="Visible" CanUserAddRows="False" AutoGenerateColumns="False"> 
    <DataGrid.Resources> 
      <ContextMenu x:Key="DataGridColumnHeaderContextMenu"> 
       <MenuItem Header="Freez Column" 
         Command="{Binding DataContext.FreezColumnCommand, RelativeSource={RelativeSource AncestorType=DataGrid}}" 
         CommandParameter="{Binding}" /> 
      </ContextMenu> 
      <Style TargetType="{x:Type DataGridColumnHeader}"> 
       <Setter Property="ContextMenu" Value="{StaticResource DataGridColumnHeaderContextMenu}" /> 
      </Style> 
    </DataGrid.Resources> 
    <DataGrid.Columns> 
      <DataGridTextColumn Header="Story" Binding="{Binding Story}" /> 
      <DataGridCheckBoxColumn Header="Design" Binding="{Binding Design}" /> 
      <DataGridTextColumn Header="CadId" Binding="{Binding CadId}" /> 
    </DataGrid.Columns> 
</DataGrid> 
+0

あなたはあなたのDatagridとカラムにも縛られていますか? – Vijay

答えて

4

これはおそらく起こっているためのContextMenuは(私が間違っているなら、私を修正)別のVisualTreeに維持されています。私はContextMenuPlacementTargetにアクセスした

<DataGrid 
     x:Name="myGrid" 
     AutoGenerateColumns="False" 
     CanUserAddRows="False" 
     HorizontalScrollBarVisibility="Visible" 
     ItemsSource="{Binding Persons}"> 
     <DataGrid.Resources> 
      <local:GridToIndexConverter x:Key="GridToIndexConverter" /> 
      <ContextMenu x:Key="DataGridColumnHeaderContextMenu"> 
       <MenuItem 
        Command="{Binding DataContext.FreezColumnCommand, RelativeSource={RelativeSource AncestorType=DataGrid}}" 
        CommandParameter="{Binding PlacementTarget.DisplayIndex, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ContextMenu}}" 
        Header="Freez Column" /> 
      </ContextMenu> 
      <Style TargetType="{x:Type DataGridColumnHeader}"> 
       <Setter Property="ContextMenu" Value="{StaticResource DataGridColumnHeaderContextMenu}" /> 
      </Style> 
     </DataGrid.Resources> 
     <DataGrid.Columns> 
      <DataGridTextColumn Binding="{Binding Story}" Header="Story" /> 
      <DataGridCheckBoxColumn Binding="{Binding Design}" Header="Design" /> 
      <DataGridTextColumn Binding="{Binding CadId}" Header="CadId" /> 
     </DataGrid.Columns> 
    </DataGrid> 

DisplayIndexを取得するために以下のコードを使用してください。

+0

ありがとう、完璧に動作します:) – IBRA

+0

welcome:)..... – WPFUser

関連する問題