Давайте воспользуемся такой штукой как InputBindings:
<StackPanel>
<StackPanel.InputBindings>
<MouseBinding Gesture="LeftDoubleClick"
Command="{Binding DataContext.EditStudent,
RelativeSource={RelativeSource FindAncestor,
AncestorType=Window}}"
CommandParameter="{Binding}"/>
</StackPanel.InputBindings>
...
</StackPanel>
Это уже работает, но у всех ItemsControl есть нюанс - по умолчанию они не растягивают свои элементы, это можно увидеть, если задать StackPanel любой цвет в Background, поэтому команда будет вызываться только при клике четко по тексту элемента. Исправить это можно, подкорректировав стиль ListViewItem:
<ListView ItemsSource="{Binding StudentsList}" ...>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="VerticalContentAlignment" Value="Stretch"/>
</Style>
</ListView.ItemContainerStyle>
...
Ну и нужно еще что-то сделать с отступами, так как то что у вас сейчас StackPanel Margin="10" вам скорее всего не понравится, например можно обернуть всё в прозрачный Border (InputBindings теперь переезжают в него, в StackPanel они больше не нужны):
<ListView.ItemTemplate>
<DataTemplate>
<Border Padding="10">
<Border.InputBindings>
<MouseBinding Gesture="LeftDoubleClick"
Command="{Binding DataContext.EditStudent,
RelativeSource={RelativeSource FindAncestor,
AncestorType=Window}}"
CommandParameter="{Binding}"/>
</Border.InputBindings>
<StackPanel>
...
</StackPanel>
</Border>
</DataTemplate>
</ListView.ItemTemplate>
Вот тогда между элементами будут визуальные отступы, но команда будет отрабатывать по клику в любом месте элемента
MouseBinding? Круто, не знал, пользовался System.Interactivity вместо этого. – VladD Oct 25 '17 at 12:53MouseLeftButtonUp, как здесь. – VladD Oct 25 '17 at 22:51Gesture="Alt+MiddleClick": https://msdn.microsoft.com/ru-ru/library/system.windows.input.mousebinding.gesture(v=vs.110).aspx – Андрей NOP Oct 26 '17 at 07:00