【问题标题】:Programmatically selecting Items/Indexes in a ListBox以编程方式选择列表框中的项目/索引
【发布时间】:2014-07-26 04:57:37
【问题描述】:

在 WPF 中,我想设置 System.Windows.Controls.ListBox 的选定索引

到目前为止,我发现的最佳方法是从控件中删除所有项目,插入所选项目,调用 SelectAll(),然后插入其余项目,但这种解决方案既不适用于我的情况,也不是很有效。

那么,如何以编程方式将列表框中的项目设置为被选中?

【问题讨论】:

    标签: wpf select listbox


    【解决方案1】:

    您可以使用 SelectedItems 集合将多个项目设置为选中状态。这不是按索引,而是按您绑定的内容:

    foreach (var boundObject in objectsBoundToListBox)
    {
        ListBox.SelectedItems.Add(boundObject);
    }
    

    【讨论】:

    • 这将为添加的每个项目引发一次 SelectionChanged 事件。当您使用 shift 手动选择一组项目时,整个组只会提升一次。
    【解决方案2】:

    您可以执行此操作的一种方法是将 Selected 字段添加到您的数据对象。然后,您需要覆盖默认的 listboxitem 样式并将 isselected 属性绑定到对象中的 Selected 属性。然后你只需要检查你的数据项并更新 Selected 值。

    如果您不将该 Selected 属性实现为依赖属性,则需要您的类实现 INotifyPropertyChanged 接口并在设置值时引发 propertychanged 事件。

    【讨论】:

    • 谢谢!...这很好。我将添加一个我在下面使用的代码段。
    • 实际上与下面的 danlash 相比,这过于复杂了。
    【解决方案3】:

    你必须这样做:

    ListBoxObject.SelectedItem = ListBoxObject.Items.GetItemAt(itemIndex);
    

    其中 itemIndex 将是您要选择的项目。 如果要选择多个项目,则需要使用 ListBox.SelectedIndexCollection 属性。

    【讨论】:

    • System.Windows.Controls.ListBox 不像 System.Windows.Forms.ListBox 延续 SelectedIndexCollection 属性
    • 但不超过一项 - 并且 SelectedItems 是只读的
    【解决方案4】:

    您可以对多个部分执行此操作:

    ListBoxObject.SelectedItems.Add(ListBoxObject.Items.GetItemAt(i));
    

    其中 i 是项目索引。

    【讨论】:

      【解决方案5】:

      感谢 mdm20。 我的案例实际上是在ListBox 中检查CheckBox,这个依赖属性就像一个魅力。 我必须从DependencyObject 继承我的自定义类并实现该属性

      public class ProjectListItem : DependencyObject{ 
      
          public Boolean IsChecked
          {
              get { return (Boolean)this.GetValue(CheckedProperty); }
              set { this.SetValue(CheckedProperty, value); }
          }
          public static readonly DependencyProperty CheckedProperty =
              DependencyProperty.Register("IsChecked", typeof(Boolean), typeof(ProjectListItem), 
                                          new PropertyMetadata(false));
      }
      

      【讨论】:

        【解决方案6】:

        如何在 wpf 中以编程方式选择列表框中的多个项目

        foreach (var boundObject in objectsBoundToListBox)
        {
            ListBox.SelectedItems.Add(boundObject);
        }
        

        【讨论】:

        • 你是否真的从这个线程上剪切并粘贴了这个来自 danlash 的内容。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-30
        • 1970-01-01
        • 1970-01-01
        • 2011-03-22
        相关资源
        最近更新 更多