Я привязываю наблюдаемую коллекцию к моему gridview.Как получить доступ к связанным ресурсам после сортировки gridview WPF
public ObservableCollection<LibraryTrack> Biblio
{ get { return _Biblio; } }
Отображение сетки содержит только необходимые значения для просмотра пользователем. Вторичная информация, такая как filelocation и id файла, не привязана к gridview, эта информация в этом случае бесполезна для пользователя.
Первый некоторый код:
<GridView x:Key="gridview">
<GridViewColumn Width="200"
HeaderContainerStyle="{StaticResource hcs}"
DisplayMemberBinding="{Binding Title}">
<GridViewColumnHeader Content="Titel" Tag="Title" Click="SortClick"/>
</GridViewColumn>
<GridViewColumn Width="200"
HeaderContainerStyle="{StaticResource hcs}"
DisplayMemberBinding="{Binding Artist}">
<GridViewColumnHeader Content="Artiest" Tag="Artist" Click="SortClick"/>
</GridViewColumn>
<GridViewColumn Width="200"
HeaderContainerStyle="{StaticResource hcs}"
DisplayMemberBinding="{Binding Album}">
<GridViewColumnHeader Content="Album" Tag="Album" Click="SortClick"/>
</GridViewColumn>
<GridViewColumn Width="50"
HeaderContainerStyle="{StaticResource hcs}"
DisplayMemberBinding="{Binding Genre}">
<GridViewColumnHeader Content="Genre" Tag="Genre" Click="SortClick"/>
</GridViewColumn>
<GridViewColumn Width="50"
HeaderContainerStyle="{StaticResource hcs}"
DisplayMemberBinding="{Binding Jaar}">
<GridViewColumnHeader Content="Jaar" Tag="Jaar" Click="SortClick"/>
</GridViewColumn>
</GridView>
Сортировка включена с помощью кода и работает отлично. В коде позади, у меня есть следующий обработчик события:
private void SortClick(object sender, RoutedEventArgs e)
{
GridViewColumnHeader column = sender as GridViewColumnHeader;
String field = column.Tag as String;
if (_CurSortCol != null)
{
AdornerLayer.GetAdornerLayer(_CurSortCol).Remove(_CurAdorner);
LibView.Items.SortDescriptions.Clear();
}
ListSortDirection newDir = ListSortDirection.Ascending;
if (_CurSortCol == column && _CurAdorner.Direction == newDir)
newDir = ListSortDirection.Descending;
_CurSortCol = column;
_CurAdorner = new SortAdorner(_CurSortCol, newDir);
AdornerLayer.GetAdornerLayer(_CurSortCol).Add(_CurAdorner);
LibView.Items.SortDescriptions.Add(new SortDescription(field, newDir));
}
Libview
является ListView
, содержащий GridView. чтобы начать воспроизведение выбранной вами песни. Я использую следующий код:
private void BtnPlay_Click(object sender, RoutedEventArgs e)
{
if (LibView.SelectedIndex == -1)
{
LibView.SelectedIndex = 0;
}
LibraryTrack curtrack = Biblio[LibView.SelectedIndex];
songInfoLabel1.Text = curtrack.Title + "\n" +
curtrack.Artist + "\n" +
curtrack.Album + "\n" +
curtrack.Jaar;
MediaEl.Source = new Uri(curtrack.Location);
MediaEl.Play();
}
Здесь возникает моя проблема. Пока gridview не сортируется Btn_Play_Click
обрабатывает все как раз отлично.
Но когда я сортирую строки, Btn_Play_Click
начинает неправильную песню. Как я могу это исправить?
Да, это решило проблему. оффтопический вопрос: ключевым словом «как» является то же, что и (LibraryTrack) LibView.SelectedItem –
Не совсем. В принципе, разница заключается в том, что использование «как» не будет генерировать исключение, если «LibView.SelectedItem» выше не имеет типа LibraryTrack (или если selecteditem имеет значение NULL). В этом случае curTrack будет равен нулю. С другой стороны, другой подход (т. Е. Литье) генерирует исключение, если выбранный элемент не является библиотекой. – ASanch