我有一个返回这样的集合的库:
公共 IEnumerable 警报 { .. }
我想把这个集合变成一个 BindingList 以在 GUI 中使用。使 BindingList 与 IEnumerable 集合保持同步的最佳方法是什么?
编辑:对于这个问题,假设我无法控制库并且实际实现使用列表。
但我不想触碰这段代码。
该库还具有与 AddAlert、RemoveAlert 等良好的界面。使 GUI 与所有这些更改保持同步的最佳方法是什么?
我有一个返回这样的集合的库:
公共 IEnumerable 警报 { .. }
我想把这个集合变成一个 BindingList 以在 GUI 中使用。使 BindingList 与 IEnumerable 集合保持同步的最佳方法是什么?
编辑:对于这个问题,假设我无法控制库并且实际实现使用列表。
但我不想触碰这段代码。
该库还具有与 AddAlert、RemoveAlert 等良好的界面。使 GUI 与所有这些更改保持同步的最佳方法是什么?
假设您要包装的类公开了类似的内容Insert
,您应该能够从 派生BindingList<T>
,覆盖一些关键方法 - 例如:
class MyList<T> : BindingList<T>
{
private readonly Foo<T> wrapped;
public MyList(Foo<T> wrapped)
: base(new List<T>(wrapped.Items))
{
this.wrapped = wrapped;
}
protected override void InsertItem(int index, T item)
{
wrapped.Insert(index, item);
base.InsertItem(index, item);
}
protected override void RemoveItem(int index)
{
wrapped.Remove(this[index]);
base.RemoveItem(index);
}
protected override void ClearItems()
{
wrapped.Clear();
base.ClearItems();
}
// possibly also SetItem
}
这应该会导致列表在您操作它们时保持同步。