我已经采用以下模式将ListViewItems放在具有多列的ListView中(当我想显示有关MyObject
类型列表的信息时),我只是很想知道这是否是完成此任务的最佳方式,或者是否有更高效和可读的代码:
ListViewItem
类,它在构造函数中使用MyObject
对象 - 我将调用此MyObjectListViewItem
- 以及一个清除和重新填充的Refresh()
方法ListViewItem子项。示例:
public MyObject MyObject { get; set; }
public MyObjectListViewItem(MyObject myObj)
{
MyObject = myObj;
this.Refresh();
}
public void Refresh()
{
this.SubItems.Clear();
this.Text = myObj.FirstColumnProperty;
this.SubItems.Add(myObj.SecondColumnProperty); // etc...
}
连连呢?更好的方式?
答案 0 :(得分:1)
您是否考虑过使用BindingSource或创建自己的IBindingListView?这使得数据及其状态的关注范围限定于数据本身,而不是任何使用它的控件。由于.NET控件已经构建为可以与BindingSources一起使用,因此您可以利用一些更强大的功能。控件只负责响应绑定源引发的事件,而不是显式调用屏幕刷新,控制器通知控件是否准备好刷新而不强制它。
答案 1 :(得分:-1)
使ListViewItems知道如何构建自己是一个好主意。
如果您稍微扩展一下这个想法,可以让列知道如何构建每个子项,这也使他们能够自动对ListView进行排序,支持分组和复制/拖放行。这只是ObjectListView为您做的一些事情。
ObjectListView是一个围绕.NET WinForms ListView控件的开源包装器,它使ListView更容易使用 - 以及添加一些非常好的新功能并解决一些恼人的错误/限制。
如果您确实喜欢@Rex使用BindingSource
的想法,那么ObjectListView项目还提供了一个数据感知DataListView
,它是可绑定数据的。