我正在尝试从列表视图中选择对象并像这样转换为我的自定义对象
MyObject foo = (MyObject)MyListView.SelectedItems[0];
但这给了我编译错误
错误 4 无法将类型“System.Windows.Forms.ListViewItem”转换为“MyObject”
默认值ListView
不可绑定数据(即您不能将某些对象指定为列表视图的数据源)。它包含ListViewItem
无法转换为您的数据类型的对象。这就是您收到此错误的原因。
如果要从中获取自定义对象,ListViewItem
则需要从以下位置手动构造它ListViewItem
:
ListViewItem item = (MyObject)MyListView.SelectedItems[0];
MyObject foo = new MyObject();
foo.FirstName = item.Text;
foo.LastName = item.SubItems[1].Text;
foo.Age = Int32.Parse(item.SubItems[2].Text);
或者您可以将自定义对象存储在Tag
属性中ListViewItem
并将其取回:
ListViewItem item = (MyObject)MyListView.SelectedItems[0];
MyObject foo = (MyObject)item.Tag;
BTW 考虑使用DataGridView
支持绑定的。
我认为您需要以不同的方式创建对象,而不是以这种方式进行转换。
如果您检索项目中的文本,则使用该文本创建对象。
string txt = MyListView.SelectedItems[0].Text;
MyObject foo = new MyObject(txt);
然后以通常的方式使用您的对象。如果没有更多细节,很难说出更多关于您需要什么的信息。
假设您的 ListItems 是您的自定义类的对象MyObject
现在在最新的 Xamarin 中,您可以通过获取SelectedItem
并将其强制转换为您的对象类型来做到这一点。
public class ItemSelectionDemo
{
public void ItemSelected(object sender, EventArgs e)
{
MyObject item = (MyObject)MyListView.SelectedItem;
Debug.WriteLine("Selected item Id: " + item.id);
Debug.Writeline("Selected item Name: " + item.name);
}
}
public class MyObject
{
public int id;
public string name;
}
您还可以SelectedItemChangedEventArgs
在方法中使用并获取所选项目并将其转换为您的对象类类型。
public void ItemSelected(object sender, SelectedItemChangedEventArgs e)
{
MyObject item = e.SelectedItem as MyObject;
Debug.WriteLine("Selected item Id: " + item.id);
Debug.Writeline("Selected item Name: " + item.name);
}