【问题标题】:Check the checkbox = listviewitem row is selected选中复选框 = listviewitem 行被选中
【发布时间】:2015-12-14 16:00:11
【问题描述】:

我正在开发 UWP 应用。 我有一个 listview,其中 listviewitem 有一个复选框和内容。我需要实现的是,当我选中复选框时,相关的 listviewitem 被选中;当我取消选中它时,相关的 listviewitem 将被取消选择。我的列表视图需要支持多选。 这是我的 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>

谁能给我点灯?

【问题讨论】:

  • 你知道SelectionMode = Multiple吗?
  • @Romasz,感谢 cmets。如何使用此属性来解决此问题?你能分享更多细节吗?
  • 还有什么问题?为什么你需要管理所有的事件?方式二的绑定方式不够处理变化?
  • ListVIew 有默认的多选视图——如果你设置了SelectionMode=Multiple,那么你就不需要额外的复选框、事件等等。唯一的区别是默认设计是复选框在左侧,但我认为您应该能够为此编辑项目的样式。
  • @JuanPabloGarciaCoello,当 listviewitem 被选中时,我需要在其他列表中显示选中的项目。有2种用户案例:1。选择ListViewItem时,请检查相关的复选框。这很容易通过将复选框的 IsChecked 绑定到 ViewModel 的 IsSelected 属性来实现。 2. 当用户点击复选框时,应该选择相关项目。当复选框被选中时,如何选择项目(并将其显示在其他列表中)?

标签: xaml uwp


【解决方案1】:

你在正确的轨道上,但如果你想在 IsMultiSelectCheckBoxEnabled 设置为 true 的情况下使用它,你不需要在 ItemTemplate 中实现你自己的 Checkbox。

根据我从您的 cmets 收集到的关于该问题的信息,您正在寻找一种在从另一个集合中选择项目时将项目从一个集合转移到另一个集合的方法。

所以删除复选框并将 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>

然后在您在行为中使用的 SelectionChanged 事件的绑定命令中,您需要将添加和删除的项目添加到 ObservableCollection 中,您可以从其他 ListView 绑定到该项目以显示选定的项目.

该方法将如下所示:

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

【讨论】:

    猜你喜欢
    • 2023-03-04
    • 2017-06-07
    • 1970-01-01
    • 2018-03-11
    • 1970-01-01
    • 2021-08-05
    • 1970-01-01
    • 2013-02-12
    相关资源
    最近更新 更多