如何提取列表视图所选条目的项目和子项目

时间:2019-04-10 10:33:40

标签: c# wpf listview

我想编辑一个由2个整数和3个字符串组成的listview项。我将项目从公共类“ Rineitem”保存到列表视图中。我可以将选定的行分配给一个对象,然后在我的本地窗口中看到它,但是我不知道如何到达它或它的子项。

我尝试查找示例,但没有发现应有的简单。我自己的尝试经常发出消息,也许我忘记了对!如果将对象转换为字符串,则会得到命名公共类的文本。

object item = lvw_Smd_Jobs.SelectedItem;

当我尝试将lvw selectedItem分配给我得到的类时,无法将类型'object'隐式转换为'Rin ... Auftrag_Verwalter.Rineitem'。存在显式转换(您是否缺少演员表?) 我想将两个字符串值保存到文本框,用户可以在其中更改值,然后保存列表视图项的更改。

2 个答案:

答案 0 :(得分:0)

一个,为什么不将所有项目另存为字符串,这样可以简化转换。

然后删除选定的项目。您将执行以下操作

var item =(string)lvw_Smd_Jobs.SelectedItem; lvw_Smd_Jobs.Items.Remove(item);

答案 1 :(得分:0)

您可以将“ ListBoxItem”(类型对象)强制转换为真正的类。

这里有一个示例,介绍如何添加,阅读和修改ListBox中的项目:

// 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();
    }
}

您面临的错误消息告诉您,没有将object转换为and 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的情况下使用。

objectRineItem的转换每次都必须工作!因此,您不知道您的对象是什么类型:

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