【问题标题】:WPF ListView Selecting Multiple List View ItemsWPF ListView 选择多个列表视图项
【发布时间】:2011-01-17 22:28:32
【问题描述】:

我正在想办法在列表视图中选择多个项目并在某个操作中删除它们。 我想不通的是,我应该如何选择这些多个项目?我认为有一个列表需要我将它们全部添加到其中,但是解决这种情况的最佳方法是什么,您有什么想法吗? 谢谢! -凯文

【问题讨论】:

    标签: c# wpf listview select


    【解决方案1】:

    SelectionMode 设置为MultipleExtended 并遍历ListView 中的SelectedItems

    【讨论】:

    • 值得注意的是,SelectionMode.Multiple 不包括使用 Shift+Click 选择连续项目或使用 Ctrl+A 选择所有项的功能。似乎是一个错误/疏忽。
    • 断开的链接 - SelectedItems。
    • 已修复!谢谢!!
    【解决方案2】:

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

    【讨论】:

    • 您能否提供任何不应使用SelectedItems 属性的原因?
    • 因为它使设计更加复杂并且可能导致错误。如果您在 ItemsSource 中的每个对象上都有一个 Selected 属性,则可以像这样非常轻松地绑定每个项目:
    • @NomanKhan 应该是 ListViewItem 而不是 ListBoxItem;我认为也不需要BasedOn...但是好的评论对我有帮助!
    【解决方案3】:

    如果您不使用 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&lt;SomeItem&gt; 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
    

    【讨论】:

      【解决方案4】:

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

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

      XAML 中的&lt;ListView SelectionMode="Extended"&gt;&lt;/ListView&gt;

      您也有“多个”选择模式,但您可以选择“扩展”,它允许用户仅使用 shift 修饰符选择多个项目。

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

      while( myListView.SelectedItems.Count > 0 )
      {
          myListView.Items.Remove(list.SelectedItems[0]);
      }
      

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

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

      干杯!

      【讨论】:

        【解决方案5】:

        通过编写也获得成功的 WPF listview

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-10
          • 2017-11-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多