Здесь нет необходимости в прикрепленном поведении или пользовательских подклассах DataGrid.
В вашем DataGrid
свяжите ItemsSource
с ICollectionView
. Хитрость здесь в том, чтобы установить IsSynchronizedWithCurrentItem="True"
, что означает, что выбранная строка будет текущим элементом.
Вторая часть уловки - привязать CommandParameter
к текущему элементу с помощью синтаксиса прямой косой черты.
Если дважды щелкнуть строку, команда будет выполнена с выбранной строкой в качестве аргумента.
<DataGrid
ItemsSource="{Binding CollectionView}"
IsSynchronizedWithCurrentItem="True">
<DataGrid.InputBindings>
<MouseBinding
MouseAction="LeftDoubleClick"
Command="{Binding DoubleClickCommand}"
CommandParameter="{Binding CollectionView/}"/>
</DataGrid.InputBindings>
</DataGrid>
Вот так будет выглядеть (упрощенная) версия модели представления:
class MyViewModel
{
public ICollectionView CollectionView { get; set; }
public ICommand DoubleClickCommand { get; set; }
}