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可以正确显示所有字段。