我在Winforms中看似简单的问题。
我想实现一个可以用作列表框的DataSource的集合。我打算用它来做简单的字符串。像这样:
MyBindingCollection<string> collection = new MyBindingCollection<string>();
listbox.DataSource = collection;
我已经读过,我需要实现的只是IList
接口。但是,当我这样做时,我希望列表框能够自动更新:
collection.Add('test');
collection.RemoveAt(0):
如何创建此类集合?这只是单向绑定,我不需要从GUI更新集合。 (列表框是只读的。)
答案 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
}