2016-11-10 5 views
1

Я делаю выиграть 10 универсальное приложение, и у меня есть два массива объектов:UWP переключателя - подмена ItemSource

private ObservableCollection<Song> Songs; 
private ObservableCollection<JonPlaylist> Playlists; 

и ListView для отображения данных внутри них:

<Page.Resources> 
     <DataTemplate x:DataType="data:Song" x:Key="SongDataTemplate"> 
      <StackPanel> 
       <StackPanel Orientation="Horizontal"> 
        <TextBlock Name="ListSongName" Text="{x:Bind Title}" VerticalAlignment="Bottom" HorizontalAlignment="Left"/> 
        <TextBlock Name="ListArtist" Text="{x:Bind Artist}" VerticalAlignment="Bottom" HorizontalAlignment="Left"/> 
       </StackPanel> 
      </StackPanel> 
     </DataTemplate> 

    <DataTemplate x:DataType="data:JonPlaylist" x:Key="PlaylistDataTemplate"> 
     <StackPanel> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Name="ListSongName" Text="{x:Bind Title}" VerticalAlignment="Bottom" HorizontalAlignment="Left"/> 
      </StackPanel> 
     </StackPanel> 
    </DataTemplate> 

</Page.Resources> 

ListView:

<ListView Name="SongListView" ItemsSource="{x:Bind Songs}" IsItemClickEnabled="True" 
        ItemClick="SongListView_ItemClick" 
ItemTemplate="{StaticResource SongDataTemplate}" /> 

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

Я пытался сделать это с шаблонами данных как страницы-ресурсов, а также подменой на listView.ItemSource и listView.ItemTemplate:

private void SwitchViewButton_Click(object sender, RoutedEventArgs e) 
{ 
      SongListView.ItemsSource = Playlists[0].GetType(); 
      SongListView.ItemTemplate = this.Resources.ElementAt(1); 


} 

Однако я не знаю, если это будет работать. Будет ли лучше использовать пользовательские элементы управления и визуальный менеджер состояний?

ответ

0

Вместо того, чтобы пытаться перестроить/перетащить один вид списка, почему бы не использовать два элемента управления списком и показать/скрыть их по мере необходимости?

Я бы очень рекомендовал использовать VisualStateManager для этого и используя x:DeferLoadStrategy="Lazy" для решения проблем производительности.

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

+0

Спасибо, теперь измените значение видимости. – Jon

+0

Я получаю исключение nullReferenceException всякий раз, когда я пытаюсь манипулировать видимостью отложенных объектов. Мне нужно изменить значение loadstrategy, прежде чем я смогу манипулировать значением видимости? Имейте в виду, что я также не использую статистиков. – Jon

+0

Редактировать * Кажется, я могу получить доступ к объектам, если найду их через this.FindName, хотя это кажется очень уродливым, поскольку я должен каждый раз вводить новую переменную. может быть найдено более чистое решение с визуальным менеджером состояния. – Jon