Я работаю над интерфейсом, который читает 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>
</GridViewColumn>
<GridViewColumn Header="Año"
DisplayMemberBinding="{Binding Year}" Width="46"/>
<GridViewColumn Header="Genero" Width="90">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock TextWrapping="Wrap" Text="{Binding Genero}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
Я применяю некоторую фильтрацию, когда набираю текстовое поле с помощью этого кода:
CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(albums.ItemsSource);
view.Filter = UserFilter;
albums.ItemsSource = CollectionViewSource.GetDefaultView(Albums);
private bool UserFilter(object item)
{
if (String.IsNullOrEmpty(subGenres.Text))
return true;
else
return ((item as Albumclass.Albumlist2).Genero.IndexOf(subGenres.Text, StringComparison.OrdinalIgnoreCase) >= 0);
}
private void SubGenres_TextChanged(object sender, TextChangedEventArgs e)
{
CollectionViewSource.GetDefaultView(albums.ItemsSource).Refresh();
// System.Diagnostics.Debug.WriteLine("escribir");
}
Данные вида сетки взяты из наблюдаемой коллекции, называемой альбомами,
поэтому без фильтрации я взял индекс из сетки, и этот индекс указывает на индекс наблюдаемой коллекции, из которой я беру идентификатор альбома, чтобы получить список песен следующим образом:
private void albums_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
int index = albums.SelectedIndex;
if (index >= 0)
{
id = Albums.ElementAt(index).Id;
// string totalsongs = Albums.ElementAt(index).Totalelements;
//retrieve songslist
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" };
Songs.ItemsSource = null;
songs = new ObservableCollection<Albumclass.Albumlist2>();
songs = xmlobserv.Xmlparser(tagarray);
Songs.ItemsSource = songs;
}
}
но теперь, когда я применяю фильтр, список меняется, и я не знаю, как указать на фактический "индекс" наблюдаемой коллекции, чтобы я мог получить правильный список песен
Заранее благодарю за помощь