2012-05-18 6 views
5

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

और मुझे सीआरयूडी करने के लिए एक डब्ल्यूपीएफ की आवश्यकता है। (बनाएँ, समीक्षा करें, अपडेट करें, हटाएं)।

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

समस्या यह है कि यह व्यायाम में दिखाई देने वाली सरल समस्या के अलावा काम नहीं करता है।

कठिनाई तब उत्पन्न होती है जब आप ग्राहक रिकॉर्ड को देख या संपादित कर रहे होते हैं जिसमें कस्टमर्ट टाइप मान नहीं है जो कस्टमर्ट टाइप तालिका में नहीं है। यह त्रुटि से हो सकता है, या ऐसा इसलिए हो सकता है क्योंकि कस्टमर्ट टाइप को बहिष्कृत कर दिया गया है, और तालिका से हटा दिया गया है।

इस परिस्थिति में, डब्ल्यूपीएफ क्या करता है, कस्टमर्ट टाइप फ़ील्ड को शून्य पर सेट करना है, क्योंकि चयनित वैल्यू आइटमसोर्स सूची में नहीं है। और यह एक समस्या है।

यदि आप केवल देख रहे हैं, तो आपको तालिका में मौजूद मान को देखना चाहिए, भले ही यह सूची में है या नहीं। यदि आप संपादन कर रहे हैं, तो आप एक तर्कसंगत तर्क दे सकते हैं कि आपको तालिका में मौजूद मूल्य को कम से कम शुरू करना चाहिए, हालांकि यदि आप चयन बदलते हैं, तो आप जो भी शुरू कर सकते हैं उसे प्राप्त नहीं कर सकते हैं।

तो, कोई विचार? यह एक समस्या है जो मेरे पास हर संपादन/दृश्य रूप में बहुत अधिक होती है, इसलिए मैं कुछ ऐसा पसंद करूंगा जो उपयोग के बिंदु पर उचित रूप से साफ हो। (यानी, एक्सएएमएल में जटिलता की पसंद दी गई है, हर जगह मुझे इन क्षेत्रों में से किसी एक को संभालने की आवश्यकता है, या कोड में जटिलता जो XAML I को इन फ़ील्ड में से किसी एक को संभालने के लिए सम्मिलित करती है, मैं बाद वाले को पसंद करूंगा।)

उत्तर

3

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

+0

मैं कोशिश कर रहा हूं, और यह काफी काम नहीं कर रहा है। यदि हम मौजूदा रिकॉर्ड देख रहे हैं, तो कंबोबॉक्स के आइटम्ससोर्स के पीछे कोड अब मौजूदा ग्राहक को सम्मिलित करता है, अगर यह डेटाबेस से वापस लौटाया गया है, तो यह नहीं है। लेकिन अगर मैं एक नया रिकॉर्ड संपादित करने के लिए बदलता हूं, तो मैं आइटम्ससोर्स प्रॉपर्टी पर प्रॉपर्टी चेंज बढ़ा रहा हूं, और डीबगर में मैं कोड को देख सकता हूं, और एक नई सूची बनाई गई है जिसमें अतिरिक्त मूल्य शामिल नहीं है, लेकिन यूआई में, मैं अभी भी पहली सूची देखता हूं। –

+0

क्या आप अपने आइटम संग्रह के लिए ऑब्जर्वेबल कोलेक्शन का उपयोग करके ट्राई करते हैं या इनोटिओप्रोपर्टी को बदलते हैं जब आपकी सूची संग्रह बदल जाती है? – Josh

+0

बस मेरे हिस्से पर मानसिक भ्रम का थोड़ा सा। मैं संपत्ति पर संपत्ति का विस्तार नहीं कर रहा था, मैंने सोचा था कि मैं था। –

0

जबकि ऊपर दिए गए उत्तर में कार्य करता है, यह प्रत्येक उदाहरण में उचित मात्रा में कोड बनाता है। और यह समस्या एक सामान्य पैटर्न के रूप में मौजूद है, कोई भी स्थान जहां एक सूची एक सूची से आती है और चयनित मूल्य दूसरे से आता है।

मैं अभी भी एक समाधान पर फैसला नहीं किया है, लेकिन मेरी नवीनतम प्रयास वादा दिखाता है।

मैंने जो किया है वह कॉम्बोबॉक्स से एक नई कक्षा प्राप्त करना है। इसके लिए, मैंने एक नई निर्भरता प्रॉपर्टी जोड़ दी है - AddSelectedIfMissing। और फिर मैं OnItemsChanged() पर ओवरराइड करता हूं। इसमें, मैं यह देखने के लिए जांच करता हूं कि क्या चयनित वैल्यू आइटम्ससोर्स में किसी भी आइटम के चयनित वैल्यूपैथ फ़ील्ड से मेल खाता है या नहीं।

मैं व्यूमोडेल की एक संपत्ति को आइटम्ससोर्स बाध्य कर रहा हूं जो मान्य विकल्पों का प्रतिनिधित्व करने वाली रिकॉर्ड ऑब्जेक्ट्स का संग्रह देता है। मैं चयनित वैल्यू को व्यूमोडेल की एक संपत्ति पर बाध्य कर रहा हूं जिसमें मौजूदा मान है। और मैं व्यू-सिलेटेड IfMissing को व्यूमोडेल की एक बूलियन प्रॉपर्टी पर बाध्य कर रहा हूं जो सच है जब मैं आइटम्ससोर्स में चयनित वैल्यू जोड़ना चाहता हूं।

और जब मैं संपादित करने के लिए दृश्य से बदलने के लिए, मैं PropertyChanged संपत्ति ItemsSource के लिए बाध्य पर बढ़ा है, इसलिए नियंत्रण यह फिर से लोड होगा।

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

लेकिन उन सीमाओं के भीतर, यह ठीक काम कर रहा है।

+1

क्या आप इसके लिए अपना कोड पोस्ट कर सकते हैं? मुझे एहसास है कि यह एक पुराना सवाल है, लेकिन मुझे एक ही समस्या है और इसमें दिलचस्पी होगी। – PlTaylor

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

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