阻止LongListSelector在插入项目时更改位置

时间:2014-07-17 22:32:12

标签: c# xaml windows-phone-8 mvvm windows-phone

我已将LongListSelector(通过XAML)绑定到ObservableCollection(来自我的ViewModel)。此集合包含新闻文章(或完全是它们的标题)。当一个新的加载时,它会被this.Articles.Insert(0, newArticle)添加,因为最新的文章应该始终位于列表的顶部。

现在我的问题出现了:ObservableCollection中插入新文章时,LongListSelector滚动位置会跳转到列表顶部。但是,由于我在后台加载文章并且用户可能已经阅读了文章标题,因为当加载新文章时,他可能会因为列表跳到最上面而被打断。

如何防止此行为?

修改

我不相信定位代码是必要的,但是因为有人可以说"它应该工作,你只是以错误的方式完成了#34;:这是我用来添加代码的代码元素:

    // inside my ViewModel
    // this.Article is ObserveableCollection

    private void NewArticlesAvailable(Repository repository, IEnumerable<Article> newArticles)
    {
        foreach (var article in newArticles.OrderBy(a => a.Date))
        {
            this.Articles.Insert(0, article);
        }
    }

这是我用于LongListSelector

的XAML代码
            <phone:LongListSelector ItemsSource="{Binding Articles}" SelectionChanged="LongListSelector_SelectionChanged">
                <phone:LongListSelector.ItemTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <TextBlock Text="{Binding Subject}" TextWrapping="NoWrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
                            <TextBlock Text="{Binding From}" TextWrapping="Wrap" Style="{StaticResource PhoneTextSubtleStyle}"/>
                        </StackPanel>
                    </DataTemplate>
                </phone:LongListSelector.ItemTemplate>
            </phone:LongListSelector>

1 个答案:

答案 0 :(得分:0)

你的意思是你已经设置了与observableCollection的绑定?如果将Binding设置为xaml中的列表,然后在c#中将项插入observablecollection,则longlistselector不应跳到顶部。你确定你从未在c#中设置longListSelector itemsSource吗?如果你在c#中设置itemSource,那么将再次生成整个列表,它将跳转到顶部。

当然,如果列表中只有少数新闻,并且所有新闻都适合屏幕,那么就会发生跳跃。然后我建议你在屏幕上显示之前加载一些新闻。