单击ListView选择并取消选择(无需Ctrl +单击)

时间:2016-01-09 15:10:16

标签: c# xaml listview windows-10 uwp

UWP中的普通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>

3 个答案:

答案 0 :(得分:1)

在Listview中启用IsItemClickEnabled。触发时,检查是否已选中单击的项目并取消选中。我已经测试了它,并且在选择之前发生了点击事件,所以你应该没问题。

答案 1 :(得分:0)

设置多个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;
        }
    }

答案 2 :(得分:0)

我遇到了同样的问题,但在 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 选择模式已经在选中的项目被点击时取消选择它,您只需要担心如果选择了不同的项目就取消选择它。