Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从ListView中的对象更新属性值_C# - Fatal编程技术网

C# 如何从ListView中的对象更新属性值

C# 如何从ListView中的对象更新属性值,c#,C#,我有两个文件。一个叫做Wood的类的文件。我已经用这个类创建了一些对象。这些对象包括属性WoodType和其他一些对象。我将这些对象填充到一个名为woodObjects的数组中。第二个文件是一个表单,其中有一个列表视图 所以我的目标是,将所有对象及其属性添加到ListView。我是这样做的: String[] row = { (listView1.Items.Count + 1).ToString(), WoodType, condition, isDry}; ListViewItem item

我有两个文件。一个叫做Wood的类的文件。我已经用这个类创建了一些对象。这些对象包括属性WoodType和其他一些对象。我将这些对象填充到一个名为woodObjects的数组中。第二个文件是一个表单,其中有一个列表视图

所以我的目标是,将所有对象及其属性添加到ListView。我是这样做的:

String[] row = { (listView1.Items.Count + 1).ToString(), WoodType, condition, isDry};
ListViewItem item = new ListViewItem(row);
listView1.Items.Add(item);
成功

现在我必须更新ListView中一个对象的属性WoodType。我为此创建了一个“更改类型”按钮。我想到了用户单击要更改的对象所在的行,然后单击“更改类型”按钮来更改它。 为了实现这一点,我想获取该行的索引,然后使用其set访问器更改“WoodType”的值,如下所示:

woodObjects[indexOfRowFromListView].WoodType = "Oak Wood";
是的,我知道,这永远不会像那样奏效。所以我的问题是:如何选择正确的索引以及如何更改属性的值

*我还考虑删除对象,但保存其值,以便可以创建除WoodType之外具有相同值的新对象。
我感谢你的帮助

我认为解决您的问题的最干净的方法是编写一个新的ListViewItem实现。大概是这样的:

public class WoodObjectListItem : System.Windows.Forms.ListViewItem
{
    public Wood WoodObject { get; }

    public WoodObjectListItem(int rowNumber, Wood woodObject) 
        : base(new string[] { rowNumber.ToString(), woodObject.WoodType, woodObject.Condition, woodObject.IsDry })
    {
        WoodObject = woodObject;
    }

    public void ChangeType()
    {
        WoodObject.WoodType = "Oak Wood";
    }
}
然后,您可以将woodObjects添加到列表视图,如下所示:

listView1.Items.Add(new WoodObjectListItem(listView1.Items.Count + 1, woodObject));
单击按钮时,您可以执行以下操作:

if (listView1.SelectedItem is WoodObjectListItem woodObjectListItem)
    woodObjectListItem.ChangeType();

@问题是,我不知道如何得到正确的索引。在得到索引后,我必须知道如何更改属性的值。我更新了我的问题以澄清。ListView应该有一个名为SelectedIndex的属性。@MehdiDehghani是的,我有。我还可以用Ecordero的解决方案得到行。主要的问题是,如何更改属性的值。@Wellocken谢谢。现在,当我有了索引时,如何更改属性的值呢?woodObjects[listView.SelectedIndex].WoodType=“New value”;非常非常感谢。解决了我的问题!