gpt4 book ai didi

c# - WPF Listview 访问 SelectedItem 和子项

转载 作者:可可西里 更新时间:2023-11-01 08:16:54 26 4
gpt4 key购买 nike

好的,我的 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com