Я немного смущен этой маленькой проблемой. ListView под W10 имеет странное поведение, которое я не могу понять. Рассмотрим простой список:Как отменить выбор ListViewItem программно?
<ListView Name="myList" ItemClick="myList_ItemClick" SelectionChanged="myList_SelectionChanged" IsItemClickEnabled="True">
<ListView.Items>
<TextBlock Text="First item"/>
<TextBlock Text="Second item"/>
<TextBlock Text="Third item"/>
<TextBlock Text="Fifth item"/>
</ListView.Items>
</ListView>
и код позади:
private void myList_ItemClick(object sender, ItemClickEventArgs e)
{
Debug.WriteLine("Clicked item");
ListView list = sender as ListView;
ListViewItem listItem = list.ContainerFromItem(e.ClickedItem) as ListViewItem;
listItem.IsSelected = !listItem.IsSelected;
}
private void myList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
Debug.WriteLine($"Selection changed -> added = {e.AddedItems.Count}, removed = {e.RemovedItems.Count}, currently selected = {myList.SelectedItems.Count}");
}
Код выше работает очень хорошо на W8.1, но на W10 я сталкиваюсь с проблемой. Выбор первого элемента работает нормально, также меняя его, но я не могу отменить выбор элемента - listview (из вывода отладки), чтобы отменить выбор элемента, а затем сразу же выбрать его - вы можете увидеть событие SelectionChanged, выпущенное дважды. Вот пример вывода отладки:
Знает ли кто-то, что происходит? Как отменить выбор элемента в этом случае?
Спасибо. Для одного элемента, похоже, работает - также мы можем опустить «listItem.IsSelected = false;», изменение * SelectionMode * выполнит эту работу. Но этот трюк не поможет, если мы хотим сделать мультивыбор - есть ли у вас какие-либо идеи по этому делу? – Romasz
@Romasz Когда SelectionMode = «Несколько», поведение по умолчанию уже отменяет выбор элемента во втором клике - никаких трюков не требуется. :) –
Да, с несколькими выборами он работает. Мне придется переделать пару вещей. Тем не менее, у IMO есть что-то не так, если мы не можем отменить выбор элемента в * SingleMode * other, который перезаписывает * SelectionMode *. Спасибо за помощь, я оставлю этот вопрос открытым какое-то время, может быть, кто-то может объяснить, что происходит с этими событиями. – Romasz