我在Windows Phone 8应用程序中有一个LongListSelector(在PivotItem中)控件。我看到一个奇怪的行为。有时LLS停止滚动。像冻结一样,我无法滚动。但是我可以使用AppBarPivotButton 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多个项目会使应用程序明显减速,以至于我不得不重新设计如何加载和显示这些东西。

要么是加载延迟问题,要么是显示问题,或者两者兼而有之。您需要确定瓶颈,并决定权衡哪些因素才能使操作快速进行。

尝试使用静态数据加载控件(已经在手机应用程序上预加载)以查看其加载情况,还是屏幕加载情况(例如,划分征服类型的配置文件)。

10-08 14:07