【发布时间】:2014-07-26 04:57:37
【问题描述】:
在 WPF 中,我想设置 System.Windows.Controls.ListBox 的选定索引
到目前为止,我发现的最佳方法是从控件中删除所有项目,插入所选项目,调用 SelectAll(),然后插入其余项目,但这种解决方案既不适用于我的情况,也不是很有效。
那么,如何以编程方式将列表框中的项目设置为被选中?
【问题讨论】:
在 WPF 中,我想设置 System.Windows.Controls.ListBox 的选定索引
到目前为止,我发现的最佳方法是从控件中删除所有项目,插入所选项目,调用 SelectAll(),然后插入其余项目,但这种解决方案既不适用于我的情况,也不是很有效。
那么,如何以编程方式将列表框中的项目设置为被选中?
【问题讨论】:
您可以使用 SelectedItems 集合将多个项目设置为选中状态。这不是按索引,而是按您绑定的内容:
foreach (var boundObject in objectsBoundToListBox)
{
ListBox.SelectedItems.Add(boundObject);
}
【讨论】:
您可以执行此操作的一种方法是将 Selected 字段添加到您的数据对象。然后,您需要覆盖默认的 listboxitem 样式并将 isselected 属性绑定到对象中的 Selected 属性。然后你只需要检查你的数据项并更新 Selected 值。
如果您不将该 Selected 属性实现为依赖属性,则需要您的类实现 INotifyPropertyChanged 接口并在设置值时引发 propertychanged 事件。
【讨论】:
你必须这样做:
ListBoxObject.SelectedItem = ListBoxObject.Items.GetItemAt(itemIndex);
其中 itemIndex 将是您要选择的项目。 如果要选择多个项目,则需要使用 ListBox.SelectedIndexCollection 属性。
【讨论】:
您可以对多个部分执行此操作:
ListBoxObject.SelectedItems.Add(ListBoxObject.Items.GetItemAt(i));
其中 i 是项目索引。
【讨论】:
感谢 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));
}
【讨论】:
如何在 wpf 中以编程方式选择列表框中的多个项目
foreach (var boundObject in objectsBoundToListBox)
{
ListBox.SelectedItems.Add(boundObject);
}
【讨论】: