如何以编程方式取消选择ListViewItem?

Rom*_*asz 3 c# listview windows-10 windows-10-mobile uwp

我为这个小问题困扰了一段时间。W10下的ListView有一些我无法理解的奇怪行为。考虑一个简单的列表:

<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>
Run Code Online (Sandbox Code Playgroud)

以及后面的代码:

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}");
}
Run Code Online (Sandbox Code Playgroud)

上面的代码在W8.1上运行良好,但是在W10上遇到了问题。选择第一个项目还可以,也可以对其进行更改,但是我不能取消选择一个项目-列表视图似乎(从调试输出中)取消选择项目,然后立即再次选择它-您可以看到两次触发了SelectionChanged事件。这是示例调试输出:

调试输出

有人知道发生了什么吗?在这种情况下如何取消选择项目?

Igo*_*lic 5

我假设UWP中发生的事件顺序不同。像这样:

未选择项目-> ItemClick事件处理程序->已选择项目-> SelectionChanged事件-> 其他事件 ->没有更多的SelectionChanged事件,因为该项目已被选择。

已选择项目-> ItemClick事件处理程序->未选择项目-> SelectionChanged事件-> 其他事件 -> SelectionChanged事件再次触发,因为不再选择该项目。

要使其正常工作,这里有一些肮脏的技巧:

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;

    if (listItem.IsSelected)
    {
        listItem.IsSelected = false;
        list.SelectionMode = ListViewSelectionMode.None;
    }
    else
    {
        list.SelectionMode = ListViewSelectionMode.Single;
        listItem.IsSelected = true;
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:多项选择的行为已经按预期工作:该项目被取消第二次单击。无需任何解决方法!