如果已选择,则单击取消选择 GridView.Item

Unselect GridView.Item on click if already selected

我知道这看起来很简单,我也是这么想的,但事实并非如此。 我有一个带有 SelectionMode="Single" 的 GridView,我只想通过单击取消 select 一个 selected 项目。问题是,当您 select 一个已经 select 的项目时,SelectionChanged 不会触发。我尝试在每个 SelectionChanged 上设置一个等于 GridView 的 SelectedIndex 的 int,然后检查 Grid_Tapped 以查看 PreviousSelectedIndex == CurrentlySelectedIndex,但是 SelectionChanged 事件在 Grid_Tapped 之前触发纳秒,所以它不会工作。有什么想法吗?

使用CellClick事件。

例如,private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)e.RowIndex 保存被单击的单元格的索引。您所要做的就是检查此索引是否等于 SelectedIndex.

是的,默认行为有点奇怪,您可以使用以下技巧来解决(有很多方法)

1.- XAML

<GridView IsItemClickEnabled="True" ItemClick="IconGridView_ItemClick" SelectionMode="Single">

2.- 事件代码:

 private async void IconGridView_ItemClick(object sender, ItemClickEventArgs e)
    {
        var gridView = sender as GridView;
        if (e.ClickedItem == gridView.SelectedItem)
        {
            await Task.Delay(100);
            gridView.SelectedItem = null;
        }
    }

如果您稍等片刻,内部事件会保留所选项目,这样它就解决了,SelectedItem 被取消选择。

我认为用这个比延迟更好:

Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => gridView.SelectedItem = null);