在WPF中,我想设置System.Windows.Controls.ListBox的选定索引
我发现目前为止最好的方法是从控件中删除所有项目,插入所选项,调用SelectAll(),然后插入其余项目,但此解决方案既不适用于我的情况也不是非常有效。< / p>
那么,如何以编程方式设置列表框中的项目?
答案 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是项目索引。