Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.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#_Wpf_Listview - Fatal编程技术网

C# 如何拉出listview所选条目的项和子项

C# 如何拉出listview所选条目的项和子项,c#,wpf,listview,C#,Wpf,Listview,我想编辑由2个整数和3个字符串组成的listview项。我正在将项目从公共类“Rineitem”保存到listview。我可以将所选行指定给一个对象,并在“本地人”窗口中查看它,但我不知道如何访问它或它的子项 我试着找一些例子,但没有找到像这样简单的例子。我自己的尝试经常给人这样的信息,也许我忘记了投哪一个了!???如果我将对象转换为字符串,就会得到一个命名公共类的文本 object item = lvw_Smd_Jobs.SelectedItem; 当我尝试将lvw selectedItem

我想编辑由2个整数和3个字符串组成的listview项。我正在将项目从公共类“Rineitem”保存到listview。我可以将所选行指定给一个对象,并在“本地人”窗口中查看它,但我不知道如何访问它或它的子项

我试着找一些例子,但没有找到像这样简单的例子。我自己的尝试经常给人这样的信息,也许我忘记了投哪一个了!???如果我将对象转换为字符串,就会得到一个命名公共类的文本

object item = lvw_Smd_Jobs.SelectedItem;
当我尝试将lvw selectedItem分配给我得到的类时,无法将类型“object”隐式转换为“Rin…Auftrag\u Verwalter.Rineitem”。存在显式转换(是否缺少强制转换?)
我想将其中两个字符串值保存到文本框中,用户可以在其中更改值,然后我将保存listview项及其更改。

第一,为什么不将所有项保存为字符串,这样可以简化您的转换

然后删除所选项目。你应该做以下的事情

var item=(字符串)lvw_Smd_Jobs.SelectedItem;
lvw_Smd_作业。项目。删除(项目)

第一,为什么不将所有项目保存为字符串,这样可以简化您的施法

然后删除所选项目。你应该做以下的事情

var item=(字符串)lvw_Smd_Jobs.SelectedItem; lvw_Smd_作业。项目。删除(项目)

您可以将“ListBoxItem”(类型对象)强制转换为它实际所在的类

下面是一个如何在
列表框中添加、读取和修改项目的小示例:

// Example class
public class RineItem
{
    public string Name { get; set; }
    public int Id { get; set; }

    // Override ToString() for correct displaying in listbox
    public override string ToString()
    {
        return "Name: " + this.Name;
    }
}

public MainWindow()
{
    InitializeComponent();

    // Adding some examples to our empty box
    this.ListBox1.Items.Add(new RineItem() { Name = "a", Id = 1 });
    this.ListBox1.Items.Add(new RineItem() { Name = "b", Id = 2 });
    this.ListBox1.Items.Add(new RineItem() { Name = "c", Id = 3 });
}

private void Button_Click(object sender, RoutedEventArgs e)
{
    // Loop through SelectedItems
    foreach (var item in this.ListBox1.SelectedItems)
    {
        // Have a look at it's type. It is our class!
        Console.WriteLine("Type: " + item.GetType()); 
        // We cast to the desired type
        RineItem ri = item as RineItem;
        // And we got our instance in our type and are able to work with it.
        Console.WriteLine("RineItem: " + ri.Name + ", " + ri.Id); 

        // Let's modify it a little
        ri.Name += ri.Name;
        // Don't forget to Refresh the items, to see the new values on screen
        this.ListBox1.Items.Refresh();
    }
}
您面临的错误消息告诉您,没有将
对象
转换为和RineItem的隐式强制转换

可能存在隐式强制转换(从int到long)。你可以创造你自己的。这里有一个例子:

public class RineItem2
{
    public string Name2 { get; set; }
    public int Id2 { get; set; }

    public static implicit operator RineItem(RineItem2 o)
    {
        return new RineItem() { Id = o.Id2, Name = o.Name2 };
    }
}
现在您可以执行以下操作:

RineItem2 r2 = new RineItem2();
RineItem r = r2;
但是,只有当类
RineItem2
中的每个对象都可以强制转换为
RineItem
时,才应该使用此选项

object
RineItem
的转换每次都必须有效!因此,您不知道您的对象是什么类型,您不允许:

object o = "bla bla";
RineItem r = (RineItem)o; // Not allowed! Will not work!
您可以将“ListBoxItem”(类型对象)强制转换为它实际所在的类

下面是一个如何在
列表框中添加、读取和修改项目的小示例:

// Example class
public class RineItem
{
    public string Name { get; set; }
    public int Id { get; set; }

    // Override ToString() for correct displaying in listbox
    public override string ToString()
    {
        return "Name: " + this.Name;
    }
}

public MainWindow()
{
    InitializeComponent();

    // Adding some examples to our empty box
    this.ListBox1.Items.Add(new RineItem() { Name = "a", Id = 1 });
    this.ListBox1.Items.Add(new RineItem() { Name = "b", Id = 2 });
    this.ListBox1.Items.Add(new RineItem() { Name = "c", Id = 3 });
}

private void Button_Click(object sender, RoutedEventArgs e)
{
    // Loop through SelectedItems
    foreach (var item in this.ListBox1.SelectedItems)
    {
        // Have a look at it's type. It is our class!
        Console.WriteLine("Type: " + item.GetType()); 
        // We cast to the desired type
        RineItem ri = item as RineItem;
        // And we got our instance in our type and are able to work with it.
        Console.WriteLine("RineItem: " + ri.Name + ", " + ri.Id); 

        // Let's modify it a little
        ri.Name += ri.Name;
        // Don't forget to Refresh the items, to see the new values on screen
        this.ListBox1.Items.Refresh();
    }
}
您面临的错误消息告诉您,没有将
对象
转换为和RineItem的隐式强制转换

可能存在隐式强制转换(从int到long)。你可以创造你自己的。这里有一个例子:

public class RineItem2
{
    public string Name2 { get; set; }
    public int Id2 { get; set; }

    public static implicit operator RineItem(RineItem2 o)
    {
        return new RineItem() { Id = o.Id2, Name = o.Name2 };
    }
}
现在您可以执行以下操作:

RineItem2 r2 = new RineItem2();
RineItem r = r2;
但是,只有当类
RineItem2
中的每个对象都可以强制转换为
RineItem
时,才应该使用此选项

object
RineItem
的转换每次都必须有效!因此,您不知道您的对象是什么类型,您不允许:

object o = "bla bla";
RineItem r = (RineItem)o; // Not allowed! Will not work!

您可以将selecteditem绑定到类型为rineitem的公共属性。如果要在选择更改时执行某些操作,请在setter中执行操作。你试过Rin…Auftrag\u Verwalter.Rineitem=lvw\u Smd\u Jobs.SelectedItem?您可以将selecteditem绑定到类型为rineitem的公共属性。如果要在选择更改时执行某些操作,请在setter中执行操作。你试过Rin…Auftrag\u Verwalter.Rineitem=lvw\u Smd\u Jobs.SelectedItem?