使用 IndexOf 时绑定源未设置位置
Bindingsource not setting position when using IndexOf
我有一个绑定到自定义对象列表的绑定源,我有以下方法:
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
设置为此索引无效。
将您的 foreach 更改为
foreach (var itm in bsItems.List)
{
if (itm.IsEqual(item))
{
bsItems.Position = bsItems.List.IndexOf(itm);
break;
}
}
您正在遍历 bsItems,但您正试图在 bsItems.List 中找到对象。它们是不同的。
似乎要正确设置位置的唯一方法是:
bsItems.ResetBindings(false);
bsItems.Position = bsItems.IndexOf(myItem);
我有一个绑定到自定义对象列表的绑定源,我有以下方法:
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
设置为此索引无效。
将您的 foreach 更改为
foreach (var itm in bsItems.List)
{
if (itm.IsEqual(item))
{
bsItems.Position = bsItems.List.IndexOf(itm);
break;
}
}
您正在遍历 bsItems,但您正试图在 bsItems.List 中找到对象。它们是不同的。
似乎要正确设置位置的唯一方法是:
bsItems.ResetBindings(false);
bsItems.Position = bsItems.IndexOf(myItem);