WPF 如何从具有 observablecollection 源的网格视图的过滤列表中获取数据

我正在研究读取 XML 的接口。


我有专辑的列表视图:


<ListView x:Name="albums" HorizontalAlignment="Left" Height="146" Margin="26,99,0,0" VerticalAlignment="Top" Width="686" SelectionChanged="albums_SelectionChanged" Background="{x:Null}" UseLayoutRounding="False" >


                <ListView.View >

                    <GridView AllowsColumnReorder="False">

                        <GridView.ColumnHeaderContextMenu>

                            <ContextMenu/>

                        </GridView.ColumnHeaderContextMenu>

                        <GridViewColumn Header="Album" Width="260">

                            <GridViewColumn.CellTemplate>

                                <DataTemplate>

                                    <TextBlock TextWrapping="Wrap" Text="{Binding Titulo}"/>

                                </DataTemplate>

                            </GridViewColumn.CellTemplate>

                        </GridViewColumn>

                        <GridViewColumn Header="Artista" Width="260">

                            <GridViewColumn.CellTemplate>

                                <DataTemplate>

                                    <TextBlock TextWrapping="Wrap" Text="{Binding Artist}"/>

                                </DataTemplate>

                            </GridViewColumn.CellTemplate>


但是现在当我应用过滤器时,列表发生了变化,我不知道如何指向 observablecolecction 的实际“索引”,所以我可以获得正确的歌曲列表


预先感谢您的帮助


阿晨1998
浏览 154回答 3
3回答

米脂

正如 JH 建议的那样,解决方案是 SelectedItem 而不是 Selectedindex,结果代码是:&nbsp;private void albums_SelectionChanged(object sender, SelectionChangedEventArgs e)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int index = albums.SelectedIndex;&nbsp; &nbsp; &nbsp; &nbsp; if (index >= 0)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int indexid = albums.SelectedIndex;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var selectedObject = albums.SelectedItems[0] as Albumclass.Albumlist2;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (selectedObject == null)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; id = selectedObject.Id;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //obteniendo lista de albums&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; string tagurl = "http://" + serverurl + "/server/xml.server.php?action=album_songs&auth=" + token + "&filter=" + id;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; string[] tagarray = { tagurl, "song", "track", "title", "composer", "artist", "time", "tag", "comment", "url" };//Creando array con datos a utilizar&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //Lennado ListView Songs&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Songs.ItemsSource = null;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; songs = new ObservableCollection<Albumclass.Albumlist2>();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; songs = xmlobserv.Xmlparser(tagarray);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Songs.ItemsSource = songs;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}&nbsp; &nbsp; }当我重置gridview时,我只使用selectedIndex来避免错误非常感谢

动漫人物

检查SelectionChangedEventArgs参数,它包含您的信息。private void albums_SelectionChanged(object sender, SelectionChangedEventArgs e){&nbsp; &nbsp; //if the listview doesn't allow multi-selection,&nbsp;&nbsp; &nbsp; //then this list contains only one item&nbsp; &nbsp;&nbsp; &nbsp; foreach (object o in e.AddedItems)&nbsp;&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Album al = o as Album;&nbsp; &nbsp; &nbsp; &nbsp; id = al.Id;&nbsp; &nbsp; &nbsp; &nbsp; //...&nbsp; &nbsp; }}

四季花海

您是否尝试过类似的方法:ObservableCollection<Albumclass.Albumlist2>&nbsp;_collection&nbsp;=&nbsp;new&nbsp;ObservableCollection<Albumclass.Albumlist2>(); _collection.IndexOf(_item)这是文档http://msdn.microsoft.com/en-us/library/ms132410.aspx
打开App,查看更多内容
随时随地看视频慕课网APP