मैंने Google और यहां जवाब के लिए खोज की है, मेरी समस्या कुछ हद तक नीचे दिए गए प्रश्न से संबंधित है, लेकिन एक नया प्रश्न वारंट करने के लिए काफी अलग है।डब्ल्यूपीएफ: कम्बोबॉक्स बाध्य मदरसोर्स संग्रह के बाद चयनित इंडेक्स खोना
Combo-box loses selection after collection changes
मूल रूप से, मैं एक WPF बता गया है जो एक ObservableCollection वर्ग के लिए बाध्य कर रहा है। इस वर्ग में संग्रह परिवर्तन अधिसूचनाओं में देरी करने के लिए अतिरिक्त कार्यक्षमता है यदि मुझे इसमें कई बदलाव करने की आवश्यकता है, जैसे डेटाबेस को ताज़ा स्नैपशॉट प्राप्त करने के लिए इसे साफ़ करना और उसे भरना।
मेरा combobox बाध्यकारी दोनों DisplayMemberPath और SelectedValuePath सेट है। SelectedValuePath एक पूर्णांक संपत्ति का समाधान करता है।
समस्या संदर्भित प्रश्न के समान है, जब मैं बाध्य संग्रह में मान ताज़ा करता हूं, बाध्य कॉम्बोबॉक्स इसके चयन को खो देता है, और खाली (चयनित इंडेक्स = -1) चला जाता है।
मैं पुष्टि कर सकता हूं कि कलेक्शन चेंजेड ईवेंट तब तक नहीं निकाल दिया जाता जब तक कि संग्रह फिर से पॉप्युलेट नहीं हो जाता है और इसमें आइटम वापस आते हैं।
अधिक पेचीदा अगर मैं निम्न कार्य है:
using (_collection.DelayNotifications())
{
var items = _collection.ToArray();
_collection.Clear();
_collection.AddRange(items);
}
बता गया नहीं उसकी चयनित मूल्य खो करता है।
जो बताता है कि संग्रह में आइटम डेटाबेस से पुनर्प्राप्त नई वस्तुओं के साथ प्रतिस्थापित हो जाते हैं - अगर मैं चयनित वैल्यूपैथ बाध्यकारी का उपयोग नहीं कर रहा था, तो मैं इसे स्वीकार कर सकता हूं, लेकिन क्योंकि मैं हूं, और क्योंकि पूर्णांक मान हैं वही, निश्चित रूप से मैं क्या कर रहा हूँ काम करना चाहिए?
मैं .NET 3.5 का उपयोग कर रहा SP1
किसी को भी किसी भी विचार है?
संपादित
नीचे टिप्पणी से और Blam का जवाब। मैं स्वीकार करता हूं कि कारण क्यों कर रहे हैं। लेकिन यह वास्तव में मेरी मदद नहीं करता है।
मैं अपने दृश्य मॉडल पर एक एकीकृत संपत्ति में Combobox की चयनित वैल्यू संपत्ति को बाध्य कर रहा हूं। अगर मैं चयनित इटैम को बांधना चाहता था, तो मुझे अपने ऑब्जेक्ट मॉडल पर उस ऑब्जेक्ट प्रकार की संपत्ति से जुड़ना होगा - लेकिन यह वास्तव में पूर्णांक संपत्ति है।
फिलहाल मैंने संपत्ति को 'फिक्स्ड वैल्यू' संपत्ति के लिए एक संपत्ति बदलती घटना को मजबूर कर "फिक्स्ड" (मामूली हैक पढ़ें) को जारी किया है। ऐसा लगता है कि कम्बोबॉक्स एक आइटम के लिए अपनी आंतरिक सूची को फिर से जांचता है जो परिभाषित चयनित वैल्यूपैथ पर मेल खाता है।
डब्ल्यूपीएफ कम्बोबॉक्स को 'पता' होना चाहिए कि इसमें एक चयनित वैल्यूपैथ वैल्यू सेट है, इसलिए मुझे लगता है कि यह एक लीप से बहुत दूर नहीं लगता है कि यह अपने आइटम मिलान तर्क को समायोजित करेगा। हालांकि यह दायरे के बाहर जा रहा है एसओ के लिए इरादा है।
मुझे एहसास है कि मैं शायद यह स्वीकार करने जा रहा हूं कि डब्ल्यूपीएफ कैसे काम करता है, लेकिन कुछ वर्षों तक WinForms में डेटा-बाध्य comboboxes के साथ लड़ने के बाद, मुझे उम्मीद थी कि मुझे WPF के साथ नहीं करना होगा :) - हालांकि यह कह रहा है कि डब्ल्यूपीएफ कम्बोबॉक्सिस WinForm के मुकाबले कहीं ज्यादा बेहतर हैं।
वैल्यूपैथ कोई फर्क नहीं पड़ता कि यह एक अलग वस्तु है ... आप बाइंडिंग को पकड़ने की उम्मीद नहीं कर सकते क्योंकि यह विशिष्ट बीमा (ऑब्जेक्ट्स) के लिए बाध्यकारी है। एक बार जब आप उन्हें हटा देते हैं, बाध्यकारी खो जाता है ... – UIlrvnd
DelayNotificatons() द्वारा लौटाई गई ऑब्जेक्ट का निपटान विधि ListReset ध्वज के साथ संग्रह परिवर्तन ईवेंट को बढ़ाता है। मैं अब भी मानता हूं कि कम्बोबॉक्स एक पूर्णांक मूल्य के लिए इसकी नई सूची को देखेगा, जिस पर यह मिलान हो सकता है ... यदि ऐसा नहीं होता है, तो मेरे विकल्प क्या हैं? – Marlon
अपने कोड उदाहरण में आप एक ही उदाहरण का उपयोग करते हैं, क्योंकि केवल एक चीज जिसे आप जोड़ते हैं संग्रह हैं। यह तब तक नहीं देखेगा जब पूर्णांक एक अलग उदाहरण है, भले ही ** ** ** एक ही मूल्य है ... उम्मीद है कि यह sence lol बनाता है ... – UIlrvnd