Обновление
Последнее решение не работало. Это комбинация из двух событий, которая отключает выбор перемещения мыши. Проблема заключается в том, что при выборе уже выбранного элемента (не существует SelectionChanged), мы все равно можем перемещать мышь вверх или вниз, чтобы изменить выбор. Единственный способ обойти это - обманом ListView снова выбрать тот же элемент. Это может быть неудобно, если у вас изменились функциональные возможности выбора, но в противном случае это, кажется, сделает работу.
<ListView SelectionMode="Extended"
Name="listView">
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<EventSetter Event="Selected" Handler="listViewItem_Selected"/>
<EventSetter Event="PreviewMouseDown" Handler="listViewItem_PreviewMouseDown"/>
</Style>
</ListView.ItemContainerStyle>
</ListView>
А в EventHandlers
void listViewItem_Selected(object sender, RoutedEventArgs e)
{
listView.ReleaseMouseCapture();
}
private void listViewItem_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
ListViewItem listViewItem = sender as ListViewItem;
if (listViewItem.IsSelected == true)
{
// Unselecting the item in the Preview event
// "tricks" the ListView into selecting it again
listViewItem.IsSelected = false;
}
}