2010-03-11 12 views
10

हमारे पास एक सूची बॉक्स है जिसमें कई आइटम हैं। वस्तुओं को एक पर्यवेक्षण चयन के माध्यम से ListBox में डाला जाता है। इनमें से कुछ आइटम सीधे सूची बॉक्स में संपादित किए जा सकते हैं। हालांकि, यदि किसी आइटम को इंडेक्स < में संपादित आइटम की अनुक्रमणिका में जोड़ा गया है, तो सूची बॉक्स की पूरी सामग्री नीचे जाती है।आइटम जोड़ने के दौरान एक सूची बॉक्सिटम को ठंडा करना

हम क्या करना चाहते हैं निम्न है: यदि कोई आइटम संपादन मोड में है, तो हम स्क्रीन पर अपनी स्थिति को जमा करना चाहते हैं। यह ठीक है अगर आइटम संग्रह में जोड़े जाते हैं और आइटम के आसपास यूआई बदल जाता है। लेकिन आइटम की स्थिति स्क्रीन पर स्थिर रहना चाहिए।

एकमात्र चीज जिसे मैं अब तक करने में सक्षम हूं, स्क्रॉल चेंज किए गए ईवेंट से जुड़ा हुआ है और, सबसे अधिक, यह सुनिश्चित करने के लिए कि ब्रिंगइंटव्यू या स्क्रॉलइंटव्यू विधियों का उपयोग यह सुनिश्चित करने के लिए करें कि आइटम हमेशा यूआई में कहीं प्रदर्शित होता है, लेकिन मैं असमर्थ हूं अपनी स्थिति को बंद करने के लिए।

क्या किसी ने ऐसा कुछ किया है और मदद की है?

+0

मैं इसे एक उत्तर के रूप में प्रस्तुत नहीं करना चाहता था, लेकिन अगर मैं इसे करना चाहता था तो पहली बात मैं कोशिश करूँगा (और यदि आप डाटाबेसिंग का उपयोग कर रहे हैं) तो आइटम संपादित होने पर डेटाबेस को तोड़ना है, और सेट संपादन पूरा होने के बाद फिर से डेटाकॉन्टेक्स्ट वापस आ गया। – Dave

उत्तर

0

आप हमेशा अपने संग्रह के अंत में जोड़े जाने के लिए मजबूर कर सकते हैं। अन्यथा, मुझे लगता है कि आप ScrollViewer स्क्रॉल करने के साथ सही रास्ते पर हैं। 'संपादन मोड' दर्ज करते समय, वर्तमान क्षैतिज ऑफसेट को ट्रैक करें।


ScrollViewer sv = listBox.GetScrollViewer(); 
double indexPos = sv.HorizontalOffset; 

हालांकि, मुझे लगता है कि आप ObservableCollection.CollectionChanged ईवेंट को जोड़ने से बेहतर होंगे। जब ईवेंट आग लगती है, तो जांचें कि क्या नया मान आपके 'संपादन मोड' आइटम से ऊपर डाला गया था या नहीं। यदि ऐसा है, तो निम्न कोड चलाएं।


ScrollViewer sv = listBox.GetScrollViewer(); 
sv.ScrollToHorizontalOffset(indexPos+1); // This will obviously require an offset 
+0

बहुत दिलचस्प है। मैं कल इसे आजमाउंगा और यह कैसे काम करता है इस पर रिपोर्ट करें। धन्यवाद। –

0

क्या समस्या है कि आप इसे आसानी से नहीं लेना चाहते हैं? या क्या समस्या है जिसे आपने संदर्भित किया है, आइटम को इसके सूचकांक संख्या से कहा गया है और जब आप परिवर्तन लागू करते हैं तो इंडेक्स में परिवर्तन अन्य समस्याओं का कारण बनता है (जैसे उन्हें पिछले इंडेक्स में मौजूद आइटम पर लागू करना)?

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

1

मुझे लगता है कि निम्नलिखित आपकी समस्या का समाधान होगा:

  1. जब संपादन मोड में प्रवेश करने, वस्तु आप संपादित कर रहे हैं, लिस्टबॉक्स में अपने सूचकांक और ScrollViewer के HorizontalOffset के लिए एक संदर्भ रहते हैं।

  2. ऑब्जेर्जेबल कोलेक्शन में एक हैंडलर में। कोलेक्शन चेंज इवेंट आपके द्वारा संपादित ऑब्जेक्ट की नई अनुक्रमणिका को ढूंढता है, अगर इंडेक्स बदल जाता है, तो संपादित आइटम को उसके स्थान पर ले जाने के साथ स्वैप करें (या अगर आप रखना चाहते हैं तो कुछ अन्य तर्क एक निश्चित आदेश)। फिर यदि ScrollViewer.HorizontalOffset बदल गया, इसे वापस ऑफसेट पर ले जाएं।

यह सुनिश्चित करेगा कि आप जिस आइटम को संपादित कर रहे हैं वह हमेशा सूची में और यूआई में एक ही स्थान पर रहेगा।

आशा है कि यह आपकी मदद करेगा।

0

क्या सूची सूची में स्विच करना संभव है, और EnsureVisible का उपयोग करना संभव होगा?

0

यदि बाकी सूचीबॉक्स को ठंडा करना एक व्यवहार्य विकल्प है।इस तरह के आइटम जो जोड़े गए हैं, तब तक प्रकट नहीं होते हैं जब तक कि संपादन पूरा नहीं हो जाता है या बच निकला जाता है, तब आप सूची बॉक्स को पुनर्निर्मित होने से रोकने के लिए BeginUpdate और EndUpdate का उपयोग करने का प्रयास कर सकते हैं। मुझे यकीन नहीं है कि यह आपकी संपादन प्रक्रिया को कैसे प्रभावित करेगा।

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