将 BindingList 绑定到集合

发布于 2024-08-20 04:12:26 字数 271 浏览 9 评论 0原文

我有一个返回这样的集合的库:

public IEnumerable Alerts { .. }

我想将此集合转换为 BindingList 以在 GUI 中使用。保持 BindingList 与 IEnumerable 集合同步的最佳方法是什么?

编辑:对于这个问题,假设我无法控制该库,并且实际实现使用列表。
但我不想碰这段代码。

该库还具有与 AddAlert、RemoveAlert 等良好的界面。保持 GUI 与所有这些更改同步的最佳方法是什么?

I have a library that returns a collection like this:

public IEnumerable Alerts { .. }

and I want to turn this collection into a BindingList for use in the GUI. What is the best way to keep a BindingList synchronised with an IEnumerable collection?

edit: For this problem, assume I have no control of the library and the actual implementation uses a List.
But I do not want to touch this code.

This library also has a nice interface with AddAlert, RemoveAlert etc. What is the best way to keep the GUI synchronised with all these changes?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

国际总奸 2024-08-27 04:12:26

类的内容,您应该能够从 BindingList 派生,重写一些关键方法 - 类似于:

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
}

假设您正在包装的类公开了诸如 Insert之 在您操作列表时保持同步。

Assuming the class you are wrapping exposes things like Insert, you should just be able to derive from BindingList<T>, overriding a few key methods - something like:

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
}

This should result in the lists staying in sync as you manipulate them.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文