我在Windows Phone 8应用程序中有一个LongListSelector
(在PivotItem
中)控件。我看到一个奇怪的行为。有时LLS停止滚动。像冻结一样,我无法滚动。但是我可以使用AppBar
,Pivot
,Button Back
等,甚至可以使用GroupHeader和JumpList。它是随机发生的(到目前为止,我还没有发现规律性),而且经常发生。之前我经常使用LLS,但是从未遇到过这些问题。
以下是LLS冻结的典型情况。
转到带有LLS的页面。
滚动LLS。
点击LLS项并导航到其他页面。
使用LLS返回页面。
LLS没有滚动。
这个袋子也可以其他方式出现。
强调:
我不会将大量收藏绑定到LLS(我的收藏大约有10-50个项目(分为5组))。
当LLS未冻结时,它的工作速度非常快,而且不会出现抖动。
我在LLS项中有一个ListBox
(1-6个字符串元素)。
我使用DataTemplateSelector(as implemented here)。
LLS冻结时,分析不会显示较差的响应。
我的XAML:
<phone:LongListSelector Name="LLSSimpleSearch" VirtualizingStackPanel.VirtualizationMode="Recycling"
ItemsSource="{Binding ListGroup}"
toolkit:TiltEffect.IsTiltEnabled="True"
Margin="12,0,-12,0"
IsGroupingEnabled="True"
LayoutMode="List"
HideEmptyGroups="False"
GroupHeaderTemplate="{StaticResource LLSHeaderTemplate}"
JumpListStyle="{StaticResource LLSJumpList}"
ListFooterTemplate="{StaticResource LLSListFooter}">
ItemTemplate
<questionary:QuestTemplateSelector Content="{Binding}">
<questionary:QuestTemplateSelector.Template1>
<DataTemplate>
<ListBox></ListBox> <!-- ListBox with small collect-->
</DataTemplate>
<questionary:QuestTemplateSelector.Template1>
<questionary:QuestTemplateSelector.Template2>
<DataTemplate>
</DataTemplate>
</questionary:QuestTemplateSelector.Template2>
<questionary:QuestTemplateSelector.Template3>
<DataTemplate>
</DataTemplate>
</questionary:QuestTemplateSelector.Template3>
<questionary:QuestTemplateSelector.Template4>
<DataTemplate>
</DataTemplate>
</questionary:QuestTemplateSelector.Template4>
</questionary:QuestTemplateSelector>
在cs中:
LLSSimpleSearch.DataContext = GYSearchViewModel.Instance;
GYSearchViewModel.Instance.Load();
视图模型
private ObservableCollection<Group<Quest>> _listGroup = new ObservableCollection<Group<Quest>>();
public ObservableCollection<Group<Quest>> ListGroup
{
get
{
return _listGroup;
}
set
{
if (value != _listGroup)
{
_listGroup = value;
NotifyPropertyChanged("ListGroup");
}
}
}
public Load()
{
MyDataSource.Load((r) => { ListGroup= r; })
}
这里有些奇怪吗?在这段代码中,有潜在的问题吗?如果需要的话,我准备发表更多评论。感谢您的建议。
UPDATE(问题的解决)
我不能百分百确定,但99%的问题是
ListBox
中的问题。<questionary:QuestTemplateSelector.Template1>
<DataTemplate>
<ListBox ScrollViewer.VerticalScrollBarVisibility="Disabled"/>
</DataTemplate>
<questionary:QuestTemplateSelector.Template1>
我必须在列表中显示数据,并且在
ListBox
中使用LLS
。实验方式,经过长时间的测试,我发现了冻结的规律性。然后得出结论,该问题在ListBox
中。在问题中,属性IsHitTestVisible
有所帮助。 <questionary:QuestTemplateSelector.Template1>
<DataTemplate>
<ListBox ScrollViewer.VerticalScrollBarVisibility="Disabled"
IsHitTestVisible="false"/>
</DataTemplate>
<questionary:QuestTemplateSelector.Template1>
现在没有问题。
最佳答案
手机必须呈现的更多控件(或项目)将导致所显示的项目总数降低。在我正在处理的WP8窗口上,要渲染的50多个项目会使应用程序明显减速,以至于我不得不重新设计如何加载和显示这些东西。
要么是加载延迟问题,要么是显示问题,或者两者兼而有之。您需要确定瓶颈,并决定权衡哪些因素才能使操作快速进行。
尝试使用静态数据加载控件(已经在手机应用程序上预加载)以查看其加载情况,还是屏幕加载情况(例如,划分征服类型的配置文件)。