XamDataGrid では、TemplateField を利用することで任意のコントロールをセルに埋め込むことができます。今回の例では、TemplateField を使ってセルにボタンを埋め込み、ボタン クリック時にクリックされた行のデータを取得してみましょう。
TemplateField を Fields コレクションに追加し、AllowEdit を Falseにして編集モードに入らないようにします。DisplayTemplate に DataTemplate を設定し、その中に Button を配置します。ボタンクリック時にクリックされた行のデータが容易に取得できるように、DataContext に祖先要素の CellValuePresenter の Record プロパティをバインドしておきます。こうすることで、XamDataGrid の仮想化による意図しないデータ参照の “ズレ” も回避できます。また、Button にクリック イベント ハンドラーを追加します。
<!-- MainWindow.xaml -->
<igDP:XamDataGrid ...>
<igDP:XamDataGrid.FieldLayouts>
<igDP:FieldLayout>
<igDP:FieldLayout.Fields>
...
<!--
ボタンを埋め込むTemplateFieldです。
クリックしたときに編集モードに入らないように、編集禁止(AllowEdit="False")にしておきます。
-->
<igDP:TemplateField Name="Button" Label="" BindingType="Unbound" AllowEdit="False">
<igDP:TemplateField.DisplayTemplate>
<DataTemplate>
<!-- クリックされた行のデータを取得できるように、DataContextにCellValuePresenterのRecordをバインドしておきます -->
<Grid DataContext="{Binding Record, RelativeSource={RelativeSource AncestorType={x:Type igDP:CellValuePresenter}}}">
<Button x:Name="button1" Content="ボタン" Click="button1_Click"/>
</Grid>
</DataTemplate>
</igDP:TemplateField.DisplayTemplate>
</igDP:TemplateField>
...
</igDP:FieldLayout.Fields>
</igDP:FieldLayout>
</igDP:XamDataGrid.FieldLayouts>
</igDP:XamDataGrid>
次にボタンのクリック イベント ハンドラーの実装です。Button の DataContext を DataRecord にキャストします。DataRecord の DataItem プロパティにデータ本体のクラス オブジェクトが入っています。下のコードは、Person クラス オブジェクトがバインドされている場合の例です。
// MainWindow.xaml.cs
private void button1_Click(object sender, RoutedEventArgs e)
{
var button = (Button)sender;
var dataRecord = button.DataContext as DataRecord;
if (dataRecord == null) return;
var clickedPerson = (Person)dataRecord.DataItem;
MessageBox.Show($"ID={clickedPerson.ID} の {clickedPerson.FamilyName} さんがクリックされました");
}
実行結果

関連情報
XamDataGrid セルに任意のコントロールを埋め込む(テンプレートフィールド)
https://kb.jp.infragistics.com/?p=1215