2

我正在尝试从列表视图中选择对象并像这样转换为我的自定义对象

MyObject foo = (MyObject)MyListView.SelectedItems[0];

但这给了我编译错误

错误 4 无法将类型“System.Windows.Forms.ListViewItem”转换为“MyObject”

4

3 回答 3

2

默认值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支持绑定的。

于 2013-07-25T12:05:31.390 回答
0

我认为您需要以不同的方式创建对象,而不是以这种方式进行转换。

如果您检索项目中的文本,则使用该文本创建对象。

string txt   = MyListView.SelectedItems[0].Text;
MyObject foo = new MyObject(txt);

然后以通常的方式使用您的对象。如果没有更多细节,很难说出更多关于您需要什么的信息。

于 2013-07-25T12:07:45.390 回答
0

假设您的 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);
}
于 2019-11-29T11:40:55.847 回答