【发布时间】:2011-01-17 22:28:32
【问题描述】:
我正在想办法在列表视图中选择多个项目并在某个操作中删除它们。 我想不通的是,我应该如何选择这些多个项目?我认为有一个列表需要我将它们全部添加到其中,但是解决这种情况的最佳方法是什么,您有什么想法吗? 谢谢! -凯文
【问题讨论】:
我正在想办法在列表视图中选择多个项目并在某个操作中删除它们。 我想不通的是,我应该如何选择这些多个项目?我认为有一个列表需要我将它们全部添加到其中,但是解决这种情况的最佳方法是什么,您有什么想法吗? 谢谢! -凯文
【问题讨论】:
将SelectionMode 设置为Multiple 或Extended 并遍历ListView 中的SelectedItems。
【讨论】:
SelectionMode.Multiple 不包括使用 Shift+Click 选择连续项目或使用 Ctrl+A 选择所有项的功能。似乎是一个错误/疏忽。
我建议不要使用ListView 的SelectedItems 属性,而是将单个ListViewItem 的Selected 属性绑定到相应的ViewModel 类。在此之后,您唯一需要做的就是找到所有绑定了 Selected 属性 TRUE 的 ViewModel 对象,将它们从模型集合中删除(如果您确实删除了)并刷新 UI。如果集合是ObservableCollection,UI会自动刷新。
祝你好运。
【讨论】:
SelectedItems 属性的原因?
如果您不使用 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>
在视图模型中,您将拥有对象: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
【讨论】:
您可以执行以下操作之一...
ListView.SelectionMode = SelectionMode.Extended 在代码隐藏中或
XAML 中的<ListView SelectionMode="Extended"></ListView>
您也有“多个”选择模式,但您可以选择“扩展”,它允许用户仅使用 shift 修饰符选择多个项目。
要删除选定的项目,您可以使用 ListView.SelectedItems 属性,如下所示
while( myListView.SelectedItems.Count > 0 )
{
myListView.Items.Remove(list.SelectedItems[0]);
}
[或者您可以使用 SelectedIndices 属性]
希望这将避免您遇到的问题:)
干杯!
【讨论】:
通过编写也获得成功的 WPF listview
while (lvJournalDetails.SelectedItems.Count > 0)
{
lvJournalDetails.Items.Remove(lvJournalDetails.SelectedItem);
}
【讨论】: