You can add DataGridTemplateColumnand add Buttonto CellTemplate. Then use the built-in ApplicationCommands.Deleteor your own ICommandforButton
<DataGrid ItemsSource="{Binding Results}"
AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="FriendlyName"
Binding="{Binding FriendlyName}"/>
<DataGridTextColumn Header="Id"
Binding="{Binding Id}"/>
<DataGridTemplateColumn Header="Delete">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="Delete"
Command="Delete"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
Update
If you do not want to use the built-in Delete, you can use your own ICommand. Here is a short example with RelayCommand, which can be found at the following link: http://msdn.microsoft.com/en-us/magazine/dd419663.aspx . In addition, I downloaded it here: RelayCommand.cs
<DataGrid ItemsSource="{Binding Results}"
SelectedItem="{Binding SelectedResult}"
AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Delete">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="Delete"
Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}},
Path=DataContext.DeleteCommand}"
CommandParameter="{Binding}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
And in your viewmodel or code for
private Result m_selectedResult;
public Result SelectedResult
{
get { return m_selectedResult;}
set
{
m_selectedResult = value;
OnPropertyChanged("SelectedResult");
}
}
private bool CanDelete
{
get { return SelectedResult != null; }
}
private ICommand m_deleteCommand;
public ICommand DeleteCommand
{
get
{
if (m_deleteCommand == null)
{
m_deleteCommand = new RelayCommand(param => Delete((Result)param), param => CanDelete);
}
return m_deleteCommand;
}
}
private void Delete(Result result)
{
Results.Remove(result);
}