C#ObjectListView - 手动设置SelectedObject

时间:2014-09-04 16:22:36

标签: c# object listviewitem objectlistview

此代码不会在ObjectListView中设置SelectedObject

int ID = 1; // unique

foreach (object o in ObjectListViewInstance.Objects)
{
    if (o.ID == ID)
    {
        this.ObjectListViewInstance.SelectedObject = o;
        break;
    }
}

我做错了吗?

2 个答案:

答案 0 :(得分:1)

ObjectListView对它正在处理的对象一无所知,因此您首先必须将ObjectListView.Objects强制转换为您正在使用的类型myObjectType。然后,您可以使用一些不错的LINQ功能直接找到正确的对象,无需遍历所有对象。 最后,您可以让ObjectListView选择项目。

int ID = 1; // unique

myObjectType selectItem =
    this.ObjectListViewInstance.Objects.Cast<myObjectType>().FirstOrDefault(o => o.ID == ID);

if (selectItem != null) 
{ 
    this.ObjectListViewInstance.SelectObject(selectItem); 
}

另请注意,ListViewObjectListView控件具有HideSelection属性,如果列表视图没有焦点,默认情况下会隐藏突出显示。

答案 1 :(得分:0)

我不确定你的意思,但SelectedObject财产对我有用。它实际上选择了该项目,但它没有突出显示它(将背景更改为另一种颜色)。

但是ListViewItem.SelectedListViewObject Items实际上只是ListViewItems}这样做,所以Selected属性可能就是你所需要的:

int ID = 1; // unique
int index = 0;

foreach (object o in ObjectListViewInstance.Objects)
{
    if (o.ID == ID)
        break;

    index++;
}

this.ObjectListViewInstance.Items[index].Selected = true;

如果您想要取消选择其他所有内容(因为它无法从其他项目中移除选择),您可以使用this.ObjectListViewInstance.SelectedObject = this.ObjectListViewInstance.Objects[index]或只是手动取消选择它们。

此外,如果您的ObjectListViewInstance尚未集中,则可能需要Focus

P.S。:可能有一些本地方法可以从绑定对象中找到相应的ListViewItem,但我不知道。如果ObjectListView使用棘手的虚拟化导致ItemsObjects个集合不同步,可能会有一些问题。