为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
阿晨1998 2022-07-23 16:50:33
我正在研究读取 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 的实际“索引”,所以我可以获得正确的歌曲列表预先感谢您的帮助
查看完整描述

3 回答

?
米脂

TA贡献1836条经验 获得超3个赞

正如 JH 建议的那样,解决方案是 SelectedItem 而不是 Selectedindex,


结果代码是:


 private void albums_SelectionChanged(object sender, SelectionChangedEventArgs e)

    {

            int index = albums.SelectedIndex;



        if (index >= 0)

             {

            int indexid = albums.SelectedIndex;

            var selectedObject = albums.SelectedItems[0] as Albumclass.Albumlist2;

            if (selectedObject == null)

            {

                return;

            }


            id = selectedObject.Id;


            //obteniendo lista de albums

            string tagurl = "http://" + serverurl + "/server/xml.server.php?action=album_songs&auth=" + token + "&filter=" + id;

            string[] tagarray = { tagurl, "song", "track", "title", "composer", "artist", "time", "tag", "comment", "url" };//Creando array con datos a utilizar


            //Lennado ListView Songs

            Songs.ItemsSource = null;

            songs = new ObservableCollection<Albumclass.Albumlist2>();

            songs = xmlobserv.Xmlparser(tagarray);


            Songs.ItemsSource = songs;

             }


    }

当我重置gridview时,我只使用selectedIndex来避免错误


非常感谢


查看完整回答
反对 回复 2022-07-23
?
动漫人物

TA贡献1815条经验 获得超10个赞

检查SelectionChangedEventArgs参数,它包含您的信息。


private void albums_SelectionChanged(object sender, SelectionChangedEventArgs e)

{

    //if the listview doesn't allow multi-selection, 

    //then this list contains only one item   

    foreach (object o in e.AddedItems) 

    {            

        Album al = o as Album;

        id = al.Id;

        //...

    }

}


查看完整回答
反对 回复 2022-07-23
?
四季花海

TA贡献1811条经验 获得超5个赞

您是否尝试过类似的方法:

ObservableCollection<Albumclass.Albumlist2> _collection = new ObservableCollection<Albumclass.Albumlist2>();
_collection.IndexOf(_item)

这是文档http://msdn.microsoft.com/en-us/library/ms132410.aspx


查看完整回答
反对 回复 2022-07-23
  • 3 回答
  • 0 关注
  • 109 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信