如何从ListViewItem中获取数据;窗体,C#

How to get data from ListViewItem; WinForms, C#

我正在将一个表单中的项目添加到另一个表单的列表视图中,并希望将列表视图中的每个项目保存到 JSON 文件中。我不知道该怎么做,并且看了几个地方,但似乎人们使用的方法与我正在使用的方法不同,或者我做错了。

这是我用来将项目添加到列表视图的代码,我如何访问每个 ListViewItem 中的每条数据才能将其全部保存到 JSON 文件中?

ListView lv = (ListView)lf.Controls["mainListView"];
        ListViewItem lvi = new ListViewItem();
        lvi.Text = Data.Name;
        lvi.Tag = Data;
            switch (Data.Type)
            {
                case "Anime":
                    lvi.ImageIndex = 0;
                    break;
                case "Book":
                    lvi.ImageIndex = 1;
                    break;
                case "Comic":
                    lvi.ImageIndex = 2;
                    break;
                case "Game":
                    lvi.ImageIndex = 3;
                    break;
                case "Manga":
                    lvi.ImageIndex = 4;
                    break;
                case "Movie":
                    lvi.ImageIndex = 5;
                    break;
                case "Other":
                    lvi.ImageIndex = 6;
                    break;
                case "TV":
                    lvi.ImageIndex = 7;
                    break;
            }
        lv.Items.Add(lvi);

这里是值 class 的信息,在这个表格中被命名为 "Data"。

public Values Data
    {
        get
        {
            Values v = new Values();
            v.Name = itemNameTxt.Text;
            v.Type = itemTypeCmb.Text;
            v.TypeName = typeNameTxt.Text;
            v.Status = statusCmb.Text;
            v.Completed = completedNUD.Value;
            v.URL = imageUrlTxt.Text;
            v.RateOne = rating1.Checked;
            v.RateTwo = rating2.Checked;
            v.RateThree = rating3.Checked;
            v.RateFour = rating4.Checked;
            v.RateFive = rating5.Checked;

            return v;
        }
        set
        {
            itemNameTxt.Text = value.Name;
            itemTypeCmb.Text = value.Type;
            typeNameTxt.Text = value.TypeName;
            statusCmb.Text = value.Status;
            completedNUD.Value = value.Completed;
            imageUrlTxt.Text = value.URL;
            rating1.Checked = value.RateOne;
            rating2.Checked = value.RateTwo;
            rating3.Checked = value.RateThree;
            rating4.Checked = value.RateFour;
            rating5.Checked = value.RateFive;
        }
    }

您似乎正在存储用于填充 ListViewItemValues class 实例 Tag 属性:

lvi.Tag = Data;

因此您可以在需要时从那里提取它。例如:

ListView lv = ...;
var valueList = lv.Items.Cast<ListViewItem>()
    .Select(lvi => (Values)lvi.Tag)
    .ToList();