Как получить доступ к связанному ресурсу после сортировки gridview WPF - PullRequest
0 голосов
/ 16 октября 2010

Я привязываю наблюдаемую коллекцию к своему сеточному виду.

    public ObservableCollection<LibraryTrack> Biblio
    { get { return _Biblio; } }

Вид сетки содержит только необходимые значения, которые должен видеть пользователь.Вторичная информация, такая как расположение файла и идентификатор файла, не привязана к виду сетки, в этом случае эта информация для пользователя бесполезна.

Сначала некоторый код:

    <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, содержащий сетку.чтобы начать воспроизведение выбранной песни, я использую следующий код:

    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();    
    }

Вот моя проблема.Пока сетка не отсортирована, Btn_Play_Click все прекрасно обрабатывает.

Но когда я сортирую строки, Btn_Play_Click запускает неправильную песню.Как я могу это исправить?

1 Ответ

1 голос
/ 16 октября 2010

Вместо использования Biblio[LibView.SelectedIndex] для получения выбранного LibraryTrack, вместо этого просто используйте LibView.SelectedItem.

LibraryTrack curtrack = LibView.SelectedItem as LibraryTrack;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...