2013-10-14 127 views
0

所以我有一个List<T>,我绑定我的ComboBoxBindingSource。工作正常,没问题。现在我需要添加一个项目到我的ComboBox列表中不可用(并且我无法修改列表的内容)。下面的方案出现在我的脑海里:将组合框绑定到两个源

  1. 创建一个原始列表的副本,并在绑定之前再添加一个项目。
  2. 通过LINQ创建两个列表的联合(第二个只有一个项目),然后让我的BindingSource监视聚合列表。
  3. 手动添加项目到组合框,然后监视列表中的更改。

现在我不想去第三个选项,失去约束优势。第一个选项不起作用,因为新创建的列表未链接到原始列表,因此不会更新。通过LINQ合并两个列表也会创建一个独立的列表,我猜。

所以我在这里寻找的是我所说的AggregateBindingSource,它会将一个或多个List<T> s作为它的DataSource并自动更新我的ComboBox。

还是有人有更好的主意吗?

回答

1

我会在自己的类(ViewModel)中创建一个新List,它由List +单个项目组成。 并将此新列表绑定到您的ComboBox。

  1. 如果您正在使用的引用工作,更新视图模型里面的名单将在你的其他名单+项目自动更新条目。

  2. 如果您不使用引用,则必须更新List + Item。你可以在ViewModel中使用更新函数。但是,即使你只使用例如整数我会把它的对象里面,所以你可以使用的参考,然后你可以再次使用步骤1

所以如果你使用的第一个您在文章中描述的两个步骤,并且要注意参考,创建新列表没有问题。

+0

从现有列表(例如使用构造函数)创建新列表并不以任何方式将新列表链接到旧列表。它仅创建原始列表的浅拷贝(即使使用引用)。原始列表中的任何更改都不会影响新列表的内容。 – dotNET

+0

ofc他们没有真正联系,但如果你在两个列表中存储相同的引用,那么他们访问相同的元素。 因此,如果您删除或插入一个列表中,您必须更新。但是如果你只是改变元素的一些成员,他们将在两个列表中更新。 –

+0

正确,但你只是建议案件号。 3我上面发布了,我想避免,因为这个列表将要经历很多插入/删除操作,所以绑定真的很方便。 – dotNET