以编程方式选择ListBox中的项目/索引

时间:2009-05-06 19:27:54

标签: wpf select listbox

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

我发现目前为止最好的方法是从控件中删除所有项目,插入所选项,调用SelectAll(),然后插入其余项目,但此解决方案既不适用于我的情况也不是非常有效。< / p>

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

6 个答案:

答案 0 :(得分:27)

您可以使用SelectedItems集合设置多个项目。这不是索引,而是你绑定的内容:

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

答案 1 :(得分:10)

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

如果未将Selected属性实现为依赖项属性,则需要在实现INotifyPropertyChanged接口时使用类并在设置值时引发propertychanged事件。

答案 2 :(得分:2)

你必须这样做:

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

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

答案 3 :(得分:2)

如何在wpf

中以编程方式选择列表框中的多个项目
foreach (var boundObject in objectsBoundToListBox)
{
    ListBox.SelectedItems.Add(boundObject);
}

答案 4 :(得分:1)

感谢mdm20。 我的案例实际上是检查CheckBox中的ListBox,而这个依赖属性就像一个魅力。 我必须从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));
}

答案 5 :(得分:1)

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

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

其中i是项目索引。