我已将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
:
<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>
答案 0 :(得分:0)
你的意思是你已经设置了与observableCollection的绑定?如果将Binding设置为xaml中的列表,然后在c#中将项插入observablecollection,则longlistselector不应跳到顶部。你确定你从未在c#中设置longListSelector itemsSource吗?如果你在c#中设置itemSource,那么将再次生成整个列表,它将跳转到顶部。
当然,如果列表中只有少数新闻,并且所有新闻都适合屏幕,那么就会发生跳跃。然后我建议你在屏幕上显示之前加载一些新闻。