Q062. XamDataGrid でセルにボタンを表示するには?

A. スタイルで CellValuePresenter のテンプレートを設定し、表示したい Field の FieldSettings.CellValuePresenterStyle に指定します。


<Window x:Class="MainWindow"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:igDP="http://infragistics.com/DataPresenter"
  xmlns:local="clr-namespace:WpfApplication1"
  Title="MainWindow" Height="350" Width="525" >
  <Window.Resources>
    <Style TargetType="igDP:CellValuePresenter" x:Key="CellButtonStyle">
      <Setter Property="Template" >
        <Setter.Value>
          <ControlTemplate TargetType="{x:Type igDP:CellValuePresenter}">
            <Button Content="{TemplateBinding Content}" Click="Button1_Click" />
          </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Style>
  </Window.Resources>
  <Grid>
    <Grid.RowDefinitions>
      <RowDefinition Height="50" />
      <RowDefinition />
    </Grid.RowDefinitions>
    <igDP:XamDataGrid Grid.Row="1" BindToSampleData="True" >
      <igDP:XamDataGrid.FieldLayouts>
        <igDP:FieldLayout>
          <igDP:Field Name="name" Label="名前" >
            <igDP:Field.Settings>
              <igDP:FieldSettings CellValuePresenterStyle="{StaticResource CellButtonStyle}" />
            </igDP:Field.Settings>
          </igDP:Field>
          <igDP:Field Name="department" Label="部署" />
          <igDP:Field Name="salary" Label="給与" />
          <igDP:Field Name="email" Label="メール" />
        </igDP:FieldLayout>
      </igDP:XamDataGrid.FieldLayouts>
    </igDP:XamDataGrid>
  </Grid>
</Window>


これでセルにボタンを表示できるのですが、テンプレートでボタンを設定しているため、コマンドをバインドしても実行されません。残念ながらコードビハインドでクリックイベント使って対処するしかなさそうです。

Private Sub Button1_Click(sender As System.Object, e As System.Windows.RoutedEventArgs)
    MessageBox.Show("ボタンが押されました!")
End Sub


NetAdvantage のヘルプは非常によく出来てるので、調べればすぐ判ると思うのですが、なにぶん機能が多すぎるため、やりたいこと探すのもけっこう大変です(汗)
この FAQ も、人のためよりむしろ自分のための備忘録になってますが、なにかのお役に立てれば幸いです。


WPF FAQ の目次に戻る