我有一个绑定到自定义对象列表的绑定源,我有以下方法:
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
设置为此索引不起作用。
答案 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);