使用SemanticZoom的JumpList在Windows Phone 8.1中不起作用

时间:2014-06-12 14:26:54

标签: c# xaml windows-phone-8 winrt-xaml windows-phone-8.1

我按照此页面上的教程:http://modernography.wordpress.com/2014/04/26/jumplists-in-windows-phone-8-1/

我有一个collectionviewsource:

// artistdata
public CollectionViewSource ArtistList
{
    get
    {
        var data = App.musicdata.Artists;
        var groups = data.ToAlphaGroups(x => x.name);
        _ArtistList = new CollectionViewSource();
        _ArtistList.Source = groups; //groups is the result of using my extension methods above
        _ArtistList.IsSourceGrouped = true;

        return _ArtistList;
    }
}

我绑定到我的XAML:

<PivotItem x:Name="artists" Margin="10,0">
    <SemanticZoom Style="{StaticResource AlphaJumpListStyle}">
        <SemanticZoom.ZoomedInView>
            <ListView Background="Transparent" ItemsSource="{Binding ArtistList.View}" Loaded="ListviewLoaded">
                <ListView.GroupStyle>
                    <GroupStyle HeaderTemplate="{StaticResource AlphaGroupHeaderTemplate}" HeaderContainerStyle="{StaticResource JumpListListHeaderContainerStyle}" HidesIfEmpty="True" />
                </ListView.GroupStyle>
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Grid.Column="1" Margin="10,5" Tapped="ArtistSelected">
                            <TextBlock FontFamily="Segoe WP" FontSize="22" Foreground="White" Text="{Binding name}" HorizontalAlignment="Left" VerticalAlignment="Top" Width="{Binding ActualWidth, ElementName=parentElementName}"/>
                            <TextBlock FontFamily="Segoe WP" FontWeight="Light" FontSize="17" Foreground="#7FFFFFFF" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0,-5,0,0">
                        <Run Text="{Binding amountofalbums}"/>
                        <Run Text="albums"/>
                            </TextBlock>
                        </StackPanel>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
        </SemanticZoom.ZoomedInView>
        <SemanticZoom.ZoomedOutView>
            <GridView ItemsSource="{Binding ArtistList.View.CollectionGroups}" Style="{StaticResource AlphaJumpListPickerStyle}" />
        </SemanticZoom.ZoomedOutView>
    </SemanticZoom>
</PivotItem>

一切正常显示,我可以打开和关闭JumpList。 但是,当我点击缩放视图中的一个字母时,zoomedinview不会跳转到该字母。相反,它保持原样?

我无法找到导致此问题的原因。也许问题是SementicZoom是在Pivot里面吗?

1 个答案:

答案 0 :(得分:1)

我认为问题是由于ListView和GridView正在获取CollectionView的不同实例而引起的。如示例所示,您应该缓存第一个创建的实例。

代码应为:

public CollectionViewSource ArtistList
{
    get
    {
        if(_ArtistList == null)
        {
            var data = App.musicdata.Artists;
            var groups = data.ToAlphaGroups(x => x.name);
            _ArtistList = new CollectionViewSource();
            _ArtistList.Source = groups; //groups is the result of using my extension methods above
            _ArtistList.IsSourceGrouped = true;
        }
        return _ArtistList;
    }
}