uwp切换数据模板 - 重新绑定itemsource

时间:2016-11-10 19:38:39

标签: c# data-binding uwp windows-10-universal uwp-xaml

我正在制作一个win 10通用应用程序,我有两个对象数组:

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


} 

但我不知道这是否有效。利用用户控件和可视状态管理器会更好吗?

1 个答案:

答案 0 :(得分:0)

为什么不使用两个列表视图控件并根据需要显示/隐藏它们,而不是尝试重新绑定/重新模板单个列表视图?

我非常建议使用VisualStateManager来执行此操作并使用x:DeferLoadStrategy="Lazy"来解决性能问题。

如果您需要有关上述内容的更多信息,请与我们联系。