选中复选框= listviewitem行已选中

时间:2015-12-14 06:53:12

标签: xaml uwp

我正在开发一个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>

有人可以给我一些灯吗?

1 个答案:

答案 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);
        }
    }