2009-10-09 14 views
5

मैंने Google पर कुछ मिनट बिताए हैं और मुझे इस समस्या से संबंधित कुछ भी नहीं मिला है:सिल्वरलाइट 3 चेकबॉक्स सूची बॉक्स बग?

आज मैंने सिल्वरलाइट 3 एसडीके में अपग्रेड किया और एक परियोजना को परिवर्तित किया जिस पर मैं काम कर रहा हूं। मैंने फिर अपने प्रोग्राम में एक सूची बॉक्स के साथ एक बग देखा जिसमें चेकबॉक्स को इसके डेटा टेम्पलेट के रूप में देखा गया है।

जब एक या अधिक आइटम चेक किए जाते हैं, और मैं ऊपर और नीचे स्क्रॉल करता हूं, ऐसा लगता है कि चरम पर चेकबॉक्स में से कुछ चेक-आउट और यादृच्छिक रूप से चेक किए जाते हैं। यह चेक किए गए/अनचेक किए गए ईवेंट को ट्रिगर नहीं करता है, हालांकि।

क्या किसी ने इस व्यवहार को देखा है? मैं साधारण से कुछ भी नहीं कर रहा हूं, कम से कम एक चेकबॉक्स की जांच हो जाने के बाद बस ऊपर और नीचे स्क्रॉल कर रहा हूं, और कुछ अन्य जिन्हें मैंने छुआ नहीं है, वे बार-बार चेक-इन की जांच करते हैं। यह सिल्वरलाइट 2 एसडीके के साथ निश्चित रूप से नहीं हो रहा था।

यहाँ मेरी लिस्टबॉक्स के लिए XAML परिभाषा है:

<ListBox x:Name="cBoxSalesmen" Width="135" Height="200" 
HorizontalAlignment="Left" VerticalAlignment="Top"> 
<ListBox.Template> 
    <ControlTemplate> 
     <Border Style="{StaticResource BorderStyleThin}"> 
      <StackPanel Orientation="Vertical"> 
       <TextBlock Text="Salesmen" /> 
       <ScrollViewer Height="176" VerticalScrollBarVisibility="Visible" > 
        <ItemsPresenter /> 
       </ScrollViewer> 
      </StackPanel> 
     </Border> 
    </ControlTemplate> 
</ListBox.Template> 
<ListBox.ItemTemplate> 
    <DataTemplate> 
     <CheckBox Margin="0" Content="{Binding}" FontSize="10" HorizontalAlignment="Left" 
       Checked="SalesmenCheckbox_Checked" Unchecked="SalesmenCheckbox_Unchecked"/> 
    </DataTemplate> 
</ListBox.ItemTemplate> 
</ListBox> 
+0

डॉन। काश मैं पहले आपका प्रश्न मिला था। यह मुझे बहुत समय बचा लिया होगा। – Jehof

उत्तर

4

मुझे लगता है आपकी समस्या ListBox (SL3 में) का परिणाम है अब एक ItemCollectionGenerator का उपयोग कर। इसके पीछे की अवधारणा यह है कि स्रोत डेटा संग्रह में पाए गए सभी ऑब्जेक्ट्स को बनाए गए डेटा टेम्पलेट के उनके संबंधित उदाहरण की आवश्यकता नहीं थी और विजुअल ट्री में जोड़ा गया था। जैसे ही आप नीचे की वस्तुओं की ओर स्क्रॉल करते हैं जिन्हें जल्द ही आवश्यकता हो सकती है। इसके अतिरिक्त आइटम जो पहले से ही बनाए जा चुके हैं लेकिन अब दृश्य से बाहर स्क्रॉल किए गए हैं, उन्हें हटाया जा सकता है। यदि उपयोगकर्ता स्क्रॉल करता है तो वे फिर से बनाए जाते हैं।

यदि ऐसा है तो इस सूची में किसी भी चेकबॉक्स की Ischecked स्थिति बड़ी सूचियों के लिए किसी बिंदु पर खो जाएगी। इसे हल करने के लिए आपको उस डेटा प्रकार में एक संपत्ति शामिल करने की आवश्यकता होगी जिसमें आप IsChecked बांध सकते हैं। इसलिए ListBox आइटम को फिर से बनाता है, यह सही ढंग से IsChecked मान असाइन करता है।

+0

ऐसा लगता है कि आप सही महोदय थे। भले ही मेरी चेक बॉक्स सूची केवल 15 आइटम थी, वास्तव में यह मुद्दा वास्तव में आपने जो वर्णन किया था। आइटम को हटाया जा रहा था और विजुअल ट्री में जोड़ा गया था और बिना किसी संपत्ति को Ischecked से जुड़ा हुआ है, यह केवल यादृच्छिक रूप से वस्तुओं को चालू/बंद कर देगा। मैंने एक केवीपी कक्षा बनाई और आपके द्वारा सुझाए गए ठीक से बाध्य किया और यह समस्या ठीक कर दी। बहुत धन्यवाद! – Overhed

+0

क्या आप उत्तर अनुभाग में अपनी कक्षा का कोड उदाहरण दे सकते हैं? या यहां यहीं: http://stackoverflow.com/questions/14703379/strange-behourour-with-a-lot-of-data-in-listbox-and-checkbox-minimal-project-pr –

5

ListBox का डिफ़ॉल्ट आइटम पैनेल वर्चुअलाइजिंगस्टैक पैनेल है। आप इसे स्टैकपैनेल का उपयोग करने के लिए बदल सकते हैं, इस तरह आप समस्या हल हो जाती है। इस कोड का प्रयोग करें:

<ListBox.ItemsPanel> 
    <ItemsPanelTemplate> 
    <StackPanel /> 
    </ItemsPanelTemplate> 
<ListBox.ItemsPanel> 
+0

+1 - यही वह है यह मेरे लिए तय किया। धन्यवाद! –

+0

क्या मुझे अपने सूची बॉक्स के बजाय इसका उपयोग करना चाहिए? और मेरी सामग्री का प्रतिनिधित्व करता है? या मुझे इसे कहीं और परिभाषित करना चाहिए? –

+0

आप एक जीवन बचतकर्ता हैं – Kurren

संबंधित मुद्दे