ListView在单击时选择并取消选择(不需要Ctrl+单击)

本文关键字:选择 单击 不需要 Ctrl+ ListView 取消 | 更新日期: 2023-09-27 18:29:47

UWP中的Normal ListView(SelectionMode="Single")在单击时选择项目,在按住Ctrl键并单击时取消选择项目。

我想更改取消选择功能,这样您就不需要按Ctrl键来取消选择项目。只需再次单击所选项目即可删除所选内容。

似乎在设置SelectionMode="Multiple"时,再次单击项目会像我想要的那样取消选择它,但我不想选择多个项目。

更新

我现在就是这样做的。所以我正在监听SelectionChanged事件,当事件被触发时,我从ListView selectedItem属性中获取所选项目。

<ListView ItemsSource="{x:Bind ViewModel.Cars}" SelectedItem="{Binding SelectedCar, Mode=TwoWay}" SelectionMode="Single">
    <interactivity:Interaction.Behaviors>
        <core:EventTriggerBehavior EventName="SelectionChanged">
            <core:InvokeCommandAction Command="{Binding CarSelectedCommand}" />
        </core:EventTriggerBehavior>
    </interactivity:Interaction.Behaviors>
    <ListView.ItemTemplate>
        <DataTemplate x:DataType="model:ICar">
            <StackPanel>
                <TextBlock Text="{x:Bind Name}"/>
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

ListView在单击时选择并取消选择(不需要Ctrl+单击)

在Listview中启用IsItemClickEnabled。当它被激发时,检查点击的项目是否已经被选中并取消选择。我已经测试过了,点击事件发生在选择之前,所以你应该很好。

设置多个SelectionMode并隐藏选择复选框

<ListView SelectionMode="Multiple" IsMultiSelectCheckBoxEnabled="False" SelectionChanged="_listView_SelectionChanged" >

对于每个选择,此事件将引发两次

Item prevSelection = null;
    private void _listView_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        Item selected = null;
        foreach (var item in e.AddedItems)
        {
            selected = item as Item;
        }
        if (selected != null && selected != prevSelection)
        {
            prevSelection = selected;
            _listView.DeselectRange(new ItemIndexRange(0, (uint)_collection.Count));
            _listView.SelectedItem = selected; //will rise event again
            selected = prevSelection = null;
        }
    }

我也遇到过同样的问题,但在WPF中。该解决方案也可以与UWP兼容。

XAML:

<ListView SelectionMode="Multiple" SelectionChanged="_ListViewSelectionChanged">

C#:

private void _ListViewSelectionChanged(object sender, SelectionChangedEventArgs e)
{
    var listView = (ListView)sender;
    if (e.AddedItems.Count > 0 && listView.SelectedItem != e.AddedItems[0])
        listView.SelectedItem = e.AddedItems[0];
}

Multiple选择模式已经取消选择了单击的选定项目,您只需要担心在选择其他项目时取消选择它。