WPF ListView选择多个列表视图项

Kev*_*vin 12 c# wpf select listview

我正在找出一种在列表视图中选择多个项目并在某个操作上删除它们的方法.我无法弄清楚的是,我该如何选择这些多项?我认为有一个列表,我需要将它们全部添加到其中,但是处理这种情况的最佳方法是什么,您有什么想法吗?谢谢!-Kevin

Arc*_*rus 23

SelectionMode设置为Multiple或者Extended遍历SelectedItems您的ListView.

  • 值得注意的是`SelectionMode.Multiple`不包括使用Shift + Click来选择连续项目或Ctrl + A来选择所有项目的能力.似乎是一个错误/疏忽. (2认同)

Tig*_*ran 9

我建议不要使用SelectedItems属性ListView,而是将Selected单个属性绑定ListViewItem到相应的ViewModel类.在此之后,您唯一需要做的就是找到ViewModel绑定Selected属性的所有对象为TRUE,从模型集合中删除它们(如果删除)并刷新UI.如果是集合ObservableCollection,UI将自动刷新.祝好运.

  • 因为它使设计更加复杂,并且可能导致错误。如果您在 ItemsSource 中的每个对象上都有一个 Selected 属性,您可以非常轻松地绑定每个项目,如下所示: <Style TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource {x:Type ListBoxItem}}"> <Setter Property="IsSelected" Value="{Binding Selected, Mode=TwoWay}" /> </Style> (3认同)
  • 您能否提供任何不应该使用`SelectedItems`属性的原因? (2认同)

Dav*_*eli 7

如果您不使用 MVVM,Arcturus 的回答很好。但是如果你这样做并且你的 ItemsSource 被绑定到你的 ViewModel 中的一些 ObservableCollection 对象,我会推荐 Tigran 回答,Noman Khan 澄清。

这是它的样子:

<ListView ItemsSource="{Binding SomeListViewList}">
    <ListView.Resources>
       <Style TargetType="{x:Type ListViewItem}">
          <Setter Property="IsSelected" Value="{Binding SomeItemSelected, Mode=TwoWay}" />
       </Style>
    </ListView.Resources>
    ...
</ListView>
Run Code Online (Sandbox Code Playgroud)

在视图模型中,您将拥有对象: public ObservableCollection<SomeItem> SomeListViewList{ get; set; }

SomeItem 类将包含 Selected 属性:

public class SomeItem
{
    public string SomeItemName { get; set; }

    public string SomeItemNum { get; set; }

    public bool SomeItemSelected { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以迭代/运行列表并获取选择的列表:

foreach (var item in SomeListViewList)
   if (item.SomeItemSelected)
      // do something
Run Code Online (Sandbox Code Playgroud)


Ams*_*nna 5

您可以执行以下操作之一...

ListView.SelectionMode = SelectionMode.Extended 在代码隐藏或

<ListView SelectionMode="Extended"></ListView> 在 XAML 中

您也有 'multiple' selectionMode 但您宁愿选择 'extended',它允许用户仅使用 shift 修饰符来选择多个项目。

要删除选定的项目,您可以使用 ListView.SelectedItems 属性,如下所示

while( myListView.SelectedItems.Count > 0 )
{
    myListView.Items.Remove(list.SelectedItems[0]);
}
Run Code Online (Sandbox Code Playgroud)

[或者您可以使用 SelectedIndices 属性]

希望这将避免您遇到的问题:)

干杯!