c# - WPF Listview 访问 SelectedItem 和子项

标签 c# wpf listview selecteditem

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

相关文章:

c# - 有没有办法加快现有数据库的 SQL Server 管理对象遍历?

c# - 此 Linq 查询等效的 C# 扩展方法是什么?

c# - 最新 windows 10 更新后 Visual Studio 2013 发布崩溃

Android - 如何删除列表项?

c# - 如何从 href 获取 QueryString?

wpf - 如何从纹理图像 x、y 到 3d 空间进行 "reverse"纹理映射?

wpf - 对转换后的路径进行不正确的 HitTest

c# - 如何从主 GUI 打开新窗口并将变量传递给新窗口

android - 如何改变ListView的外观?

android - 数据来自多个 "tables"的 ListView 的优化建议