好的,我的 C# WPF ListView 控件有更多问题。这是它的全部荣耀:
<Window x:Class="ebook.SearchResults" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="ISBNListView" Height="503" Width="1004">
<Grid>
<ListView Name="listView1" Margin"22,30,33,28" MouseDoubleClick="getSelectedItem" >
<ListView.View>
<GridView>
<GridView.Columns>
<GridViewColumn Header="ISBN" Width="150" DisplayMemberBinding="{Binding ISBN}"/>
<GridViewColumn Header="Title" Width="350" DisplayMemberBinding="{Binding Title}"/>
<GridViewColumn Header="Author" Width="350" DisplayMemberBinding="{Binding Author}" />
</GridView.Columns>
</GridView>
</ListView.View>
</ListView>
</Grid>
我正在用以下内容填充 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]
返回一个对象
。在访问其成员之前,您首先需要将其转换为特定类型。对于转换,您需要知道要转换到的类的名称,但是您正在将一个匿名类(= 没有名称)的实例添加到您的 ListView。
解决方案:使用 ISBN、Title 和 Author 属性定义一个类(例如,Book
),并将 Book
的实例添加到 ListView。然后你可以做必要的转换:
private void getSelectedItem(object sender, MouseButtonEventArgs e)
{
Book book = (Book)listView1.SelectedItems[0];
System.Windows.MessageBox.Show(book.ISBN);
}
不要忘记将实例 if 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);
}
关于c# - WPF Listview 访问 SelectedItem 和子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1402878/