0
我綁定一個可觀察的集合到我的gridview。如何在排序gridview後訪問綁定的資源WPF
public ObservableCollection<LibraryTrack> Biblio
{ get { return _Biblio; } }
gridview只包含用戶看到的必要值。像文件位置和文件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
是包含GridView中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();
}
這是我的問題。只要gridview沒有排序Btn_Play_Click
處理一切就好了。
但是,當我排序的行Btn_Play_Click
開始錯誤的歌曲。 我該如何解決這個問題?
是的,解決了它。 offtopic問題: 「as」關鍵字與 (LibraryTrack)LibView.SelectedItem – 2010-10-16 16:10:09
不一樣。基本上,區別在於如果上面的「LibView.SelectedItem」不是類型LibraryTrack(或者如果selecteditem爲null),那麼使用「as」不會引發異常。在這種情況下,curTrack將等於null。另一方面,如果選擇的項目不是LibraryTrack,則另一種方法(即投射)將引發異常。 – ASanch 2010-10-16 16:16:14