2014-09-22 1 views
2

Я пишу приложение для воспроизведения потоковой музыки. В приложении у меня есть много списков (список рейтинга, список результатов поиска, выделение списка песен .....), каждый список имеет тот же набор данных, который я привязываю к LongListSelector для каждой страницы. Поэтому я использую этот DataTemplate как ресурсы и поместить его в app.xamlПолучить родительский ObservableCollection, который выбран Item - WP8

<DataTemplate x:Key="BasicVideoTemplate"> 
    <Grid Tap="ChangeSong_Tap" RowsAuto="50,50" ColumnsAuto="150,*" Background="White" Margin="5,0,5,10"> 
     <Grid.ColumnDefinition> 
      <ColumnDefinition Width = "150"/> 
      <ColumnDefinition Width = "*"/> 
     </Grid.ColumnDefinition> 
     <Grid.RowDefinition> 
      <RowDefinition Height = "50"/> 
      <RowDefinition Height = "50"/> 
     </Grid.RowDefinition> 
     <Border BorderThickness="1" BorderBrush="Black" Grid.RowSpan="2" Grid.Column="0" VerticalAlignment="Center" Margin="5,0,5,0"> 
      <Image Source="{Binding Cover}"/> 
     </Border> 
     <TextBlock Text="{Binding Name}" Grid.Row="0" Grid.Column="1" Style="{StaticResource BlackTextBlock}" Margin="5,0,0,0"/> 
     <TextBlock Text="{Binding Artist}" Grid.Row="1" Grid.Column="1" Foreground="Black" Margin="5,0,0,0"/> 
     <!-- .............. --> 
    </Grid> 
</DataTemplate> 

И этот код (который я поставил в App.xaml.cs), чтобы выбрать песню из списка, создать аудиодорожки из этого пункта и навигации в playSongPage:

private void ChangeSong_Tap(object sender, System.Windows.Input.GestureEventArgs e) 
{ 
    var item = (SongItemModel)(sender as FrameworkElement).DataContext; 
    App.Model.ChangeSong(item.Id); /// this code will create a audio track for this item 
    (Application.Current.RootVisual as PhoneApplicationFrame).Navigate(new Uri("/Pages/DetailSongPage.xaml", UriKind.Relative)); 
} 

Проблема здесь в том, что я должен создать список < AudioTrack> для моего плейлиста, так как я могу получить родительский список щелкнули пункта и добавить его в список < AudioTrack>, в то время как все этот код был помещен в app.xaml.cs ???

ответ

1

Я бы обработал его в случае SelectionChanged событий каждого longlistselector. Вся вещь Tap на сетке не сидит со мной.

<phone:LongListSelector x:Name="myLSS" SelectionChanged="myLSS_SelectionChanged"/> 

// event handler changes to 
private void myLSS_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    LongListSelector lls = sender as LongListSelector; // get lls 
    var item = (SongItemModel) lls.SelectedItem; 
    App.Model.ChangeSong(item.Id); /// this code will create a audio track for this item 


    // now your ObservableCollection is just the ItemsSource, save a reference to it 
    // in the State manager so you can reference it on another page if you wish 
    ObservableCollection<SongItemModel> obs = (ObservableCollection<SongItemModel>) lls.ItemsSource; 
    PhoneApplicationService.Current.State["current_obs"] = obs; 

    // navigate.............. 
    (Application.Current.RootVisual as PhoneApplicationFrame).Navigate(new Uri("/Pages/DetailSongPage.xaml", UriKind.Relative));     
} 
+0

Так SelectionChanged получите весь список как itemsoures? Большое спасибо: D – user3448806

+0

Да, «longlistselector» - это тот, который поднимает событие. поэтому вы можете просто взять его у отправителя. –

+0

слишком долго искали слишком простой способ - thnx – XikiryoX