2009-05-06 55 views
14

在WPF中,我想设置一个System.Windows.Controls.ListBox编程选择项/索引在ListBox

到目前为止,我已经找到了我最佳的方式选择的指标是要消除所有的从控件中插入选项,调用SelectAll(),然后插入其余部分,但此解决方案既不适用于我的情况,也不是非常有效。

那么,如何设置列表框中的项目以编程方式进行选择?

回答

9

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

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

+0

这工作完美,非常感谢你! – Alex 2009-05-06 20:09:07

+0

谢谢!...这工作正常。我只需添加我在下面使用的代码段。 – 2010-11-21 03:24:32

+0

实际上,与以下的danlash相比,这是过度复杂的。 – henon 2015-11-25 11:46:27

2

你必须这样做:

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

当的ItemIndex将要选择的项目。 如果你想选择多个项目,你需要使用ListBox.SelectedIndexCollection属性。

+1

System.Windows.Controls.ListBox不像System.Windows.Forms.ListBox中的SelectedIndexCollection属性 – Alex 2009-05-06 20:09:45

26

您可以通过使用SelectedItems集合来设置多个项目。这是不是指数,而是看你有什么样的约束:

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

如何在WPF程序选择列表框中的多个项目

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

感谢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)); 
} 
1

您可以为多个部分做到这一点:

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

其中i为项目索引。