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中启用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
选择模式已经取消选择了单击的选定项目,您只需要担心在选择其他项目时取消选择它。