げんさん日記

プログラミングで気付いた事等を書きます。

DataGridのCellTemplate内からViewModelにイベントを通知する。

2024年12月06日 08時10分54秒 | WPF
DataGridTemplateColumn内のコントロールからViewModelにコマンドを通知させます。


<DataGridTemplateColumn Header="使用" >
 <DataGridTemplateColumn.CellTemplate>
  <DataTemplate>
   <CheckBox x:Name="SerialUseFlag"
         IsChecked="{Binding ItemUseFlagBool}"
         Style="{StaticResource NormalCheckStyle}"
         >
    <i:Interaction.Triggers>
     <i:EventTrigger EventName="Checked">
      <i:InvokeCommandAction Command="{Binding DataContext.UseCheckCommand,
       RelativeSource={RelativeSource FindAncestor,
        AncestorType={x:Type DataGrid}}}"
       />
     </i:EventTrigger>
    </i:Interaction.Triggers>
   </CheckBox>
  </DataTemplate>
 </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

下のレベルからバインドする場合はRelativeSourceでコントロールに紐づいているDataContextから検索する必要があります。
この方法は他コントロールのテンプレートを作成した場合にも使用できます。