1

我采用以下模式将 ListViewItems 放入具有多列的 ListView 中(当我想显示有关MyObject类型列表的信息时),我只是想知道这是否是完成此任务的最佳方式,或者如果代码中有任何更高效和可读的东西:

  1. 创建一个继承ListViewItem类,该类在构造函数中获取一个MyObject对象——我将调用它MyObjectListViewItem——以及一个Refresh()清除和重新填充 ListViewItem 子项的方法。
  2. 用我的新 MyObjectListViewItem 项填充 ListView。

例子:

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...
}

建议?更好的方法?

4

2 回答 2

1

您是否考虑过使用BindingSource或创建自己的实现 IBindingListView ?这使得对数据及其状态的关注仅限于数据本身,而不是任何使用它的控件。由于 .NET 控件已经构建为与 BindingSource 一起使用,因此您可以利用一些更强大的功能。控件不是显式调用屏幕刷新,而是简单地负责响应绑定源引发的事件,以及通知控件是否已准备好刷新而不强制刷新的控制器。

于 2009-11-16T16:18:25.083 回答
0

制作知道如何构建自己的 ListViewItem 是一个好主意。

如果你稍微扩展这个想法,你会让列知道如何构建每个子项,这也允许它们能够自动对 ListView 进行排序,支持分组和复制/拖放行。这只是ObjectListView为您做的一些事情。

ObjectListView 是一个围绕 .NET WinForms ListView 控件的开源包装器,它使 ListView 更易于使用 - 并添加了一些非常好的新功能并解决了一些烦人的错误/限制。

简单的 ObjectListView 在行动

如果您确实喜欢@Rex 的使用 a 的想法BindingSource,那么 ObjectListView 项目还提供了一个DataListView可数据绑定的数据感知。

于 2009-11-20T18:23:57.793 回答