WPF Listview访问SelectedItem和子项

Dav*_*ave 12 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>
Run Code Online (Sandbox Code Playgroud)

我用以下内容填充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 });
        }
Run Code Online (Sandbox Code Playgroud)

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

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

对C#和.Net来说仍然是新手,并且我的头靠在墙上.我认为这应该很简单.

dtb*_*dtb 30

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

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

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

不要忘记将实例添加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);
}
Run Code Online (Sandbox Code Playgroud)