使用IndexOf时Bindingsource没有设置位置

时间:2016-04-26 12:57:16

标签: c# winforms bindingsource

我有一个绑定到自定义对象列表的绑定源,我有以下方法:

private void SetMyItem(MyItem item)
{
    //Test 1
    if (item != null)
    {
        bsItems.Position = bsItems.List.IndexOf(item);
    }

    //Test 2 
    foreach (var itm in bsItems)
    {
        if (itm.IsEqual(item))
        {
            bsItems.Position = bsItems.List.IndexOf(itm);
            break;
        }
    }
}

该列表包含一些项目,其中一项也是传递给方法的参数。

在上面的第一个测试中,我通过获取传递参数的索引立即设置位置。该职位为-1。

为了确保传递的参数等于列表中的项目,我添加了第二个测试。找到匹配项,但位置仍为-1。

为什么绑定源没有设置正确的位置?

修改

IsEqual是一种扩展方法,它将两个对象序列化为二进制流并进行比较。

编辑2

IndexOf按预期工作。它返回正确的索引。但是,将Position设置为此索引不起作用。

2 个答案:

答案 0 :(得分:0)

将你的foreach改为

foreach (var itm in bsItems.List)
{
    if (itm.IsEqual(item))
    {
        bsItems.Position = bsItems.List.IndexOf(itm);
        break;
    }
}

您正在迭代bsItems,但您正在尝试在bsItems.List中找到该对象。它们是不同的。

答案 1 :(得分:0)

似乎正确设置位置的唯一方法是:

bsItems.ResetBindings(false);
bsItems.Position = bsItems.IndexOf(myItem);
相关问题