如何为Listbox DataSource实现单向绑定集合?

时间:2010-04-21 15:01:53

标签: c# winforms data-binding listbox

我在Winforms中看似简单的问题。

我想实现一个可以用作列表框的DataSource的集合。我打算用它来做简单的字符串。像这样:

MyBindingCollection<string> collection = new MyBindingCollection<string>();
listbox.DataSource = collection;

我已经读过,我需要实现的只是IList接口。但是,当我这样做时,我希望列表框能够自动更新:

collection.Add('test');
collection.RemoveAt(0):

如何创建此类集合?这只是单向绑定,我不需要从GUI更新集合。 (列表框是只读的。)

1 个答案:

答案 0 :(得分:3)

尝试使用BindingList<T>它适用于单向和双向绑定。

BindingList<string> list = new BindingList<string>();
listbox.DataSource = list;

list.Add("Test1");
list.Add("Test2");
list.RemoveAt(0);

修改:
添加了IBindingList的示例解决方案 您不必为IBindingList接口实现所有方法 你不需要的只是扔NotImplementedException

public class MyBindingList : IBindingList
{
    private readonly List<string> _internalList = new List<string>();

    public int Add(object value)
    {
        _internalList.Add(value.ToString());
        var listChanged = ListChanged;
        var newIndex = _internalList.Count - 1;
        if (listChanged != null)
        {
            listChanged(this, new ListChangedEventArgs(ListChangedType.ItemAdded, newIndex));
        }
        return newIndex;
    }

    public event ListChangedEventHandler ListChanged;

    public int IndexOf(object value) // No need for this method
    {
        throw new NotImplementedException();
    }

    // + all other methods on IBindingList interface
}