2013-01-18 8 views
5

में संलग्न होने पर LongListSelector प्रदर्शन बहुत खराब है मेरे पास UserControl है जिसमें शीर्ष पर नियंत्रण का एक समूह और LongListSelector उनके नीचे होना चाहिए। पूरे UserControl की कुल ऊंचाई स्क्रीन ऊंचाई से अधिक हो सकती है (और लगभग हमेशा होगी) और उस स्थिति में एक संपूर्ण UserControl स्क्रॉल करने योग्य होना चाहिए।स्क्रॉलवियर

<staff:UserContentControl 
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:controls="clr-namespace:MyApp.Controls" 
    xmlns:staff="clr-namespace:MyApp.Helpers" 
    x:Class="MyApp.Controls.RemoteHomePage" 

    DataContext="{Binding RelativeSource={RelativeSource Self}}" 
    FontFamily="{StaticResource PhoneFontFamilyNormal}" 
    FontSize="{StaticResource PhoneFontSizeNormal}"> 

    <ScrollViewer> 
     <ScrollViewer.Content> 
      <StackPanel> 
       <TextBlock Txt="Text1" Sign="@" /> 
       <TextBlock Txt="Text2" Sign="#" /> 
       <controls:Divider /> 

       <TextBlock Txt="Text3" Sign="~" /> 
       <TextBlock Txt="Text4" Sign="~" /> 
       <controls:TextDivider Text="Divider text" /> 

       <phone:LongListSelector ItemsSource="{Binding Items}"> 
        <phone:LongListSelector.ItemTemplate> 
         <DataTemplate> 
          <TextBlock Text="{Binding Title}" /> 
         </DataTemplate> 
        </phone:LongListSelector.ItemTemplate> 
       </phone:LongListSelector> 
      </StackPanel> 
     </ScrollViewer.Content> 
    </ScrollViewer> 
</staff:UserContentControl> 

यह समाधान मेरी जरूरतों को संतुष्ट करता है, लेकिन यह भी एक बड़ी समस्या है:: वर्तमान में LongListSelector लोड करने के लिए जब उसमें शामिल आइटमों की राशि काफी बड़ी है बहुत समय वास्तव में लेता है

मेरे मौजूदा सेटअप इस प्रकार है। 300 वस्तुओं को संसाधित करने में 8 सेकंड लगते हैं और उस समय पूरे यूआई को अवरुद्ध कर दिया जाता है। यहां तक ​​कि वस्तुओं की काफी बड़ी राशि के साथ लगभग तुरंत

<staff:UserContentControl 
    ...> 

    <phone:LongListSelector ItemsSource="{Binding Items}"> 
     <phone:LongListSelector.ItemTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding Title}" /> 
      </DataTemplate> 
     </phone:LongListSelector.ItemTemplate> 
    </phone:LongListSelector> 
</staff:UserContentControl> 

तो LongListSelector भार: यदि मैं लेकिन LongListSelector सब कुछ को हटाने, इसलिए पसंद है। लेकिन जाहिर है, मुझे इसके ऊपर उन अन्य नियंत्रणों की आवश्यकता है, इसलिए सवाल यह है कि मैं इस मुद्दे को हल कर सकता हूं?

(इसके अलावा संबंधित प्रश्न: मैं चिंतित था कि LongListSelectorScrollViewer अंदर डबल स्क्रॉल या कि लेकिन जैसे कुछ कारण बन सकता है अंत में सब कुछ मुझे यकीन है कि नहीं है कि यह अन्य स्क्रॉल अंदर है अगर LongListSelector किसी भी तरह जानता हूँ इस संबंध में ठीक निकला। नियंत्रण या अगर कुछ और होता है तो मुझे पता नहीं होता है। कुछ व्याख्यान यह ठीक काम करता है, हालांकि बहुत धीमा, बहुत सराहना की जाएगी।)

+1

आप इसे गलत कर रहे हैं। –

+0

@MathiasLykkegaardLorenzen :) – Anton

उत्तर

13

स्क्रॉल दर्शक का उपयोग न करें, क्योंकि यह longlistselector लगता है कि यह एक असीम लंबा स्क्रीन उपलब्ध है और इसके सभी आइटम प्रस्तुत करना कर देगा:

यहाँ स्पष्टीकरण कैसे आइटम के लिए विभिन्न टेम्प्लेट स्थापित करने के लिए है। अपने उपयोगकेस को हल करने के बजाय शीर्षलेख और पाद लेख गुणों का उपयोग अपनी सूची वस्तुओं के ऊपर या नीचे डेटा जोड़ने के लिए करें।

1

आप स्क्रॉलव्यूयर को LongListSelector आइटम वर्चुअलाइज़ करने के लिए मजबूर नहीं कर सकते हैं।

तो आपको केवल LongListSelector द्वारा व्यवहार की नकल करने की आवश्यकता है।

पहला आइटम बनाएं जिसमें आपके सभी आवश्यक तत्व हैं StackPanel (1'st itemtemplate)। और अन्य तत्व मूल LongListSelector तत्व (2'nd itemtemplate) होंगे। Styling a selected ListViewItem in Windows 8 CP