Nunca se hizo esto con un DataGrid. Usualmente, cuando necesito controlar algo como esto, utilizo un ListBox y una DataTemplate con una grilla dentro para darle la idea de una grilla o una vista de lista con una grilla en la plantilla porque ambas le dan más control sobre la interacción.
Un tiro en la oscuridad, ya que es vinculante, puede utilizar un DataGridTemplateColumn.CellEditingTemplate y crear su propio botón/texto Eliminar que está visible o habilitado en función de la lógica dentro de su objeto vinculante. Tal vez algo como esto (no probé esto, pero debería ser una dirección a la que puedes ir)
<dg:DataGridTemplateColumn Header="Action">
<dg:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Text Content="Delete" />
</DataTemplate>
</dg:DataGridTemplateColumn.CellTemplate>
<dg:DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ButtonEnabled="{Binding Path=IsDeleteEnabled, Mode=OneWay}" Content="Delete" Command="{Binding Path=DeleteMe}" />
</DataTemplate>
</dg:DataGridTemplateColumn.CellEditingTemplate>
</dg:DataGridTemplateColumn>
Usando este método, ya que el comando está ligado al objeto individual, es probable que tenga que generar un evento modelo de vista de su pantalla se encarga de eliminar esa fila de la ObservableCollection.
De nuevo, no estoy seguro si esta es la mejor manera, pero es mi puñalada de 10 minutos. Entonces, si es horrible, por favor no me vote demasiado.
+1 Buena idea, pero solo funcionará si la selección múltiple está desactivada. Voy a probar si funciona porque creo que es una buena solución, pero dependo de la selección múltiple y para esto no funcionará. – HCL