2016-11-10 40 views
1

我正在做一個贏得10個通用的應用程序,我有對象的兩個數組:UWP開關數據模板 - 重新綁定的ItemSource

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

和列表視圖來顯示它們的內部數據:

<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 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。在我可以操縱可見性值之前,是否需要更改負載策略的值?請記住我目前還沒有使用狀態管理器。 – Jon

+0

編輯*我似乎能夠訪問的對象,如果我通過this.FindName找到他們,雖然這似乎非常醜陋,因爲我必須每次intanciate一個新的變量。可以通過視覺狀態管理器找到更乾淨的解決方案 – Jon