如何在ListView中插入对象类型?

我想在ListView中维护ID和Object Type。 我正在尝试这样做:

lstView.Items.Insert(MyObject); // can't do this, because it takes only Int and String 

在我的情况下,ID是int,所以该部分是好的。 但是如何在Item_Selection更改事件中插入对象类型并检索它?

ListView不能像ListBoxComboBox那样直接添加或插入对象,而是需要创建ListViewItem并设置其Tag属性。

来自Msdn的Tag属性

包含有关控件的数据的Object。 默认值为null。

可以将从Object类派生的任何类型分配给此属性。 如果通过Windows窗体设计器设置Tag属性,则只能分配文本。 Tag属性的常见用途是存储与控件密切相关的数据。 例如,如果您有一个显示客户信息的控件,则可以在该控件的Tag属性中存储包含客户订单历史记录的DataSet,以便快速访问数据。

示例代码:

 MyObject myObj = new MyObject(); ListViewItem item = new ListViewItem(); item.Text = myObj.ToString(); // Or whatever display text you need item.Tag = myObj; // Setup other things like SubItems, Font, ... listView.Items.Add(item); 

当您需要从ListView获取对象时,可以转换Tag属性。

 private void OnListViewItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) { MyObject myObj = (MyObject)e.Item.Tag; int id = myObj.Id; // Can access other MyObject Members } 

通常,它更容易将function包装到辅助方法中。

 public static void CreateListViewItem(ListView listView, MyObject obj) { ListViewItem item = new ListViewItem(); item.Tag = obj; // Other requirements as needed listView.Items.Add(item); } 

你可以这样做:

 CreateListViewItem(listView, obj); 

ListView不像许多控件那样支持DataSource属性,所以如果你想要数据绑定,你需要实现更多自定义的东西。

创建新的listviewitem对象。 使用Tag属性。

最快的方法是在旁边保留一个对象列表:

 List list = ... ; // my list 

使用字符串作为ID从列表生成字典,或者您可以使用索引从原始列表中检索:

 Dictionary listBinder = new Dictionary( list.Select(i => new KeyValuePair(i.ID, i.Name)) ); 

绑定或代码隐藏将列表视图附加到字典,然后使用所选项目从私有列表中检索您的对象。