WPF ListView选择多个列表项

16

我正在尝试找出一种方法来选择列表视图中的多个项目,并在某个操作上将它们删除。 我无法想象如何选择这些多个项目。 我想有一个列表需要将它们全部添加进去,但是应该怎样最好地解决这种情况呢? 你有任何想法吗? 谢谢! -Kevin

我正在思考一种在列表视图中选择多个项并在特定操作上删除它们的方法。 我无法确定如何选择这些多个项。 我认为需要一个列表将它们全部添加到其中,但是应该如何最好地解决这种情况呢? 你有什么想法吗? 谢谢! -凯文
5个回答

27

5
值得注意的是,SelectionMode.Multiple 不能使用 Shift+Click 选择连续的项目或者 Ctrl+A 选择全部的项目。这似乎是一个错误/疏忽。 - Livven

13

我建议不要使用ListViewSelectedItems属性,而是将单个ListViewItemSelected属性绑定到相应的ViewModel类。之后,你只需要找到所有已将Selected属性绑定为TRUE的ViewModel对象,从模型集合中移除它们(如果你确实要移除),并刷新UI。如果集合是ObservableCollection,则UI将自动刷新。 祝好运。


3
请提供任何不应使用“SelectedItems”属性的原因。 - tobi.at
3
因为这会使设计更加复杂,可能会导致错误。如果每个在ItemsSource中的对象都有一个选定属性,那么可以像这样非常容易地绑定每个项目: <Style TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource {x:Type ListBoxItem}}"> <Setter Property="IsSelected" Value="{Binding Selected, Mode=TwoWay}" /> </Style> - Noman Khan
1
@NomanKhan 应该是 ListViewItem 而不是 ListBoxItem;另外我想 BasedOn 也不需要...但是好的评论,帮了我很多! - Maverick Meerkat

10

如果您不使用MVVM,则Arcturus的回答很好。但是,如果您使用MVVM并且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>

在视图模型中,您将拥有以下对象: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; }
}

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

foreach (var item in SomeListViewList)
   if (item.SomeItemSelected)
      // do something

5
您可以选择以下其中一种方法...
在代码后台中使用 ListView.SelectionMode = SelectionMode.Extended 或者在 XAML 中使用 <ListView SelectionMode="Extended"></ListView>。您还可以选择“多重”选择模式,但更好的选择是“扩展”模式,它允许用户仅使用 Shift 修改键选择多个项目。
要删除所选项目,您可以使用 ListView.SelectedItems 属性,如下所示:
while( myListView.SelectedItems.Count > 0 )
{
    myListView.Items.Remove(list.SelectedItems[0]);
}

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

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

干杯!


0

通过编写代码,也可以在WPF列表视图中获得成功

while (lvJournalDetails.SelectedItems.Count > 0)
{
    lvJournalDetails.Items.Remove(lvJournalDetails.SelectedItem);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接