我正在开发一个UWP应用程序。 我有一个listview,listviewitem有一个复选框和内容。我需要实现的是,当我勾选复选框时,选择了相关的listviewitem;当我取消选中它时,取消选择相关的listviewitem。我的listview需要支持多选。 这是我的xmal代码:
<ListView Grid.Row="1" x:Name="SuggestListView" ItemsSource="{Binding SuggestList}" IsMultiSelectCheckBoxEnabled="True" IsItemClickEnabled="True" SelectionChanged="SuggestListView_SelectionChanged">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<ctl:PersonUserControl HorizontalAlignment="Left"/>
<CheckBox Name="CheckBoxhhh" HorizontalAlignment="Right" IsChecked="{Binding IsSelected, Mode=TwoWay}" Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked"/>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
<Interactivity:Interaction.Behaviors>
<Core:EventTriggerBehavior EventName="SelectionChanged">
<Core:InvokeCommandAction Command="{Binding SelectSuggestPersonCommand}"/>
</Core:EventTriggerBehavior>
</Interactivity:Interaction.Behaviors>
</ListView>
有人可以给我一些灯吗?
答案 0 :(得分:1)
你走在正确的轨道上,但是如果你想在IsMultiSelectCheckBoxEnabled设置为true的情况下使用它,你就不需要在ItemTemplate中实现自己的Checkbox。
根据您对问题的评论我收集到的内容,当您从另一个中选择时,您正在寻找一种方法将项目从一个集合转移到另一个集合。
因此,请删除该复选框,并将SelectionMode =“Multiple”添加到ListView。
在ListView的行为中,您正在侦听SelectionChanged,因此请从ListView中删除它,它应如下所示:
<ListView Grid.Row="1" x:Name="SuggestListView" ItemsSource="{Binding SuggestList}" IsMultiSelectCheckBoxEnabled="True" SelectionMode="Multiple">
<ListView.ItemTemplate>
<DataTemplate>
<ctl:PersonUserControl HorizontalAlignment="Left"/>
</DataTemplate>
</ListView.ItemTemplate>
<Interactivity:Interaction.Behaviors>
<Core:EventTriggerBehavior EventName="SelectionChanged">
<Core:InvokeCommandAction Command="{Binding SelectSuggestPersonCommand}"/>
</Core:EventTriggerBehavior>
</Interactivity:Interaction.Behaviors>
</ListView>
然后在您在Behavior中使用的SelectionChanged事件的绑定命令中,您将要添加和删除的项目添加到ObservableCollection,您可以从其他ListView绑定到该ObservableCollection以显示所选的。
该方法看起来像这样:
public ObservableCollection<ItemType> SelectedItems { get; private set; }
private void SelectedItemsChanged(SelectionChangedEventArgs args)
{
foreach (var item in args.AddedItems)
{
var vm = item as ItemType;
if (vm == null)
{
continue;
}
this.SelectedItems.Add(vm);
}
foreach (var item in args.RemovedItems)
{
var vm = item as ItemType;
if (vm == null)
{
continue;
}
this.SelectedItems.Remove(vm);
}
}