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