Ваш ответ на самом деле работал для меня, но я не могу поднять его из-за правил переполнения стека :-). Проблема, с которой я столкнулся, заключается в том, что мне пришлось дважды нажать кнопку, чтобы заставить ее выполнить команду. Один раз для выбора строки, один раз для нажатия кнопки.
Обычно я просто связываю команду в сетке данных, и она будет работать,
<Button Style="{StaticResource LinkButton}" Content="Remove" Command="{Binding DataContext.RemoveCommand, Source={StaticResource ProxyElement}}" CommandParameter="{Binding}" />
Но, как указано выше, это не сработало.
Вот что я должен был сделать.
<Button PreviewMouseDown="UIElement_OnPreviewMouseDown" Style="{StaticResource LinkButton}" Content="Remove" />
private void UIElement_OnPreviewMouseDown(object sender, MouseButtonEventArgs e) {
ViewModel.RemoveCommand.Execute(((sender as Button).DataContext));
}
Это помогло с сеткой данных, но это, конечно, не очень хорошее решение MVVM, и мне даже больно это делать. Я использую WPF 3.5, поэтому, возможно, MS исправила эту проблему в WPF 4.0.