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

时间:2015-12-24 21:58:13

标签: c# xaml windows-store-apps uwp

我知道这看起来很简单,这也是我的想法,但实际上并非如此。 我有一个GridView,SelectionMode =“Single”,我想通过点击它来取消选择一个选定的项目。问题是,当您选择已选择的项目时,SelectionChanged不会触发。我尝试在每个SelectionChanged上使用等于GridView的SelectedIndex的int,然后检查Grid_Tapped以查看PreviousSelectedIndex == CurrentlySelectedIndex,但SelectionChanged事件在Grid_Tapped之前触发纳秒,因此它不起作用。有什么想法吗?

3 个答案:

答案 0 :(得分:3)

是的,这是一个有点奇怪的默认行为,你可以做以下技巧来解决(有很多方法)

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。

答案 1 :(得分:3)

我认为使用它更好,而不是延迟:

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

答案 2 :(得分:-1)

使用CellClick事件。

在示例中,private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)e.RowIndex包含单击的单元格的索引。您所要做的就是检查此索引是否等于SelectedIndex