C#-LongListSelector停止滚动并冻结

我在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>

我必须在列表中显示数据,然后在LLS中使用ListBox.实验方式,经过长时间的测试,我发现了冻结的规律性.然后得出结论,该问题在ListBox中.在问题属性IsHitTestVisible中提供了帮助.

 <questionary:QuestTemplateSelector.Template1>
                   <DataTemplate>
                        <ListBox ScrollViewer.VerticalScrollBarVisibility="Disabled"
                                 IsHitTestVisible="false"/>
                   </DataTemplate>
    <questionary:QuestTemplateSelector.Template1>

现在没有问题.

解决方法:

手机必须呈现的更多控件(或项目)将导致所显示的项目总数降低.在我正在处理的WP8窗口上,要渲染的50个项目会使应用程序明显减速,以至于我不得不重新设计这些东西的加载和显示方式.

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

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

上一篇:如何在C#中使画布正确检测触摸输入?


下一篇:如何将C#中的图像数组绑定到XAML图像源?