WPF Listview访问SelectedItem和子项

好吧,我的C#WPF ListView控件存在更多问题。 这里充满了荣耀:

              

我用以下内容填充listView:

 XDocument xdoc = XDocument.Load(GlobalVars.docPath + "\\tempSearchResults.xml"); var items = from item in xdoc.Descendants("Book") select new { ISBN = item.Element("ISBN").Value, Title = item.Element("Title").Value, AuthTexts = item.Element("Author").Value }; foreach (var item in items) { listView1.Items.Add(new { ISBN = item.ISBN, Title = item.Title, Author = item.AuthTexts }); } 

当双击时,我有一段时间从一行中检索数据。 DoubleClick会弹出一个包含行中所有数据的消息框,我似乎无法只获取一个子项或单元格的数据。 说一行有ISBN:1234567标题:Hurrr作者:Waldo,我如何只检索ISBN或只是标题?

 private void getSelectedItem(object sender, MouseButtonEventArgs e) { System.Windows.MessageBox.Show(listView1.SelectedItems[0].ToString()); } 

对C#和.Net来说仍然是新手,并且撞到了墙上。 我认为这应该很简单。

listView1.SelectedItems[0]返回一个object 。 首先需要将其强制转换为特定类型,然后才能访问其成员。 对于转换,您需要知道要转换为的类的名称,但是您要向ListView添加匿名类 (=没有名称)的实例。

解决方案:使用ISBN,标题和作者属性定义一个类(例如, Book ),并将Book实例添加到ListView。 然后你可以做必要的演员:

 private void getSelectedItem(object sender, MouseButtonEventArgs e) { Book book = (Book)listView1.SelectedItems[0]; System.Windows.MessageBox.Show(book.ISBN); } 

如果Book到ListView而不是匿名类型的实例,请不要忘记添加实例:

 var items = from item in xdoc.Descendants("Book") select new Book // <--- { ISBN = (string)item.Element("ISBN"), Title = (string)item.Element("Title"), Author = (string)item.Element("Author"), }; foreach (var item in items) { listView1.Items.Add(item); } 
  var items = from item in xdoc.Descendants("Book") select new Book() // <--- { ISBN = (string)item.Element("ISBN"), Title = (string)item.Element("Title"), Author = (string)item.Element("Author"), }; foreach (var item in items) { listView1.Items.Add(item); } 

我上面的代码有问题,一旦我使用它,我的listView没有列出任何这些值。 我不知道这是否会对你有所帮助,或者这是否正确但经过几次测试后我在“选择新书”之后添加了(),然后ListView可以正确显示所有字段。