2014-02-18 60 views
3

我在Windows Phone 8應用程序中有LongListSelector(在PivotItem)控件。我看到一個奇怪的行爲。有時LLS停止滾動。像凍結一樣,我無法滾動它。但我可以使用AppBar,Pivot,Button Back等,甚至GroupHeader和JumpList。它隨機發生(到目前爲止我沒有發現規律性)並且經常發生。早些時候我經常使用LLS,但這些問題從來都沒有。LongListSelector停止滾動並凍結

以下是LLS可以凍結的典型場景。

  1. 轉到使用LLS的頁面。
  2. 滾動LLS。
  3. 點擊LLS項目並導航到其他頁面。
  4. 回到LLS頁面。
  5. LLS不滾動。

這個包也可以以其他方式發生。

亮點:

  • 我也不大集合結合LLS(我的收藏約10 - 50項(5組))。
  • 當LLS沒有凍結時,它的工作速度非常快,沒有混蛋。
  • 我有一個ListBox(1 - 6個字符串元素)在LLS項目中。
  • 我用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(問題的解決)

我不能肯定100%,但99%是在ListBox問題。

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

我必須在列表中顯示我的數據,我用ListBoxLLS。實驗方式,經過長時間的測試,我發現了凍結的規律性。然後得出結論,在ListBox的問題。在問題屬性IsHitTestVisible幫助。

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

現在沒問題。

回答

3

手機必須呈現的控件(或項目)越多,相對於顯示的項目總數而言,速度越慢。在我正在研究的WP8窗口中,有50多個要呈現的項目會顯着減慢應用程序的運行速度,直到我不得不重新設計這些事情的加載和顯示方式。

無論是加載延遲問題還是顯示問題,或者兩者兼而有之。您需要確定瓶頸並確定哪些權衡會使操作快速無論如何。

嘗試使用靜態數據(已在電話應用程序中預先加載)加載控件,以查看其負載或屏幕加載(例如除法和征服類型的分析)。

+0

感謝您的建議,明天我會嘗試將靜態數據綁定到LLS並從項目中刪除列表框。我會在後更新中介紹結果。 – Alexandr

+0

OmegaMan,我更新了我的帖子,認爲我想出了問題。 – Alexandr

0

我不知道,如果我說的是對的 - 但只是爲了

着想你取從互聯網項目,並把它們添加到觀察的集合到該longlistselector的綁定?你使用「等待」關鍵字?也許在OnNavigatedTo()方法中有一些繁重的處理?

如果是這樣,從網絡獲取東西的過程可能在UI線程中運行,而不是在另一個線程中運行,或者某些其他任務不應該在前臺運行時阻塞CPU--這意味着應用程序正在等待處理數據,並且CPU被阻止,直到所有數據都從網上獲取 - 在此期間應用程序將無響應 - 您可以使用滾動數據透視表,使用appbar等,但我認爲這些將被限制爲只是用戶界面行爲 - 他們不會運作