c# - ComboBox with IEnumerable<Brush> as ItemsSource and SelectedItem exception -


मेरे पास कॉम्बोबॉक्स के साथ यह मुद्दा है जो IEnumerable & lt; brush & gt; आइटमों के रूप में; समस्या तब होती है जब मैं (प्रोग्रामेटिक रूप से) SelectedItem को सेट करने का प्रयास करता हूं यहां कोड है जो समस्या का वर्णन करता है:

  निजी रीडोनली सूची & lt; ब्रश & gt; रंग की_; निजी ब्रश white_; ViewModelConstructor () {colors_ = (brushes_type.GetProperties () में पी में से चुनें (ब्रश) कनवर्टर। कनवर्टफ़ोमस्ट्रिंग (पी। नोम))। ToList (); White_ = colors_.Single (b = & gt; बी.ToString () == "#FFFFFFFF"); } सार्वजनिक IEnumerable & lt; ब्रश & gt; रंग {वापस {return colors_; }} सार्वजनिक ब्रश व्हाइट {get {return white_; } सेट {if (white_! = Value) white_ = value; }}  

और यहां xaml कोड है:

  & lt; कॉम्बो बॉक्स आइटमस्सोर्स = "{बाध्यकारी पथ = रंग}" चयनितआईटम = "{बाध्यकारी पथ = व्हाइट } "& gt; & LT; ComboBox.ItemTemplate & gt; & LT; DataTemplate & gt; & Lt; स्टैकपैनेल ओरिएंटेशन = "क्षैतिज" & gt; & Lt; बॉर्डर बॉर्डरछोटी = "1" बॉर्डरब्रश = "ब्लैक" चौड़ाई = "20" ऊँचाई = "12" स्नैपटोवडिवाइस पिक्सेल = "ट्रू" मार्जिन = "0,0,4,0" & gt; & Lt; सीमा पृष्ठभूमि = "{बाइंडिंग}" / & gt; & Lt; / बॉर्डर & gt; & Lt; टेक्स्टब्लॉक टेक्स्ट = "{बाइंडिंग}" / & gt; & Lt; / StackPanel & gt; & Lt; / DataTemplate & gt; & LT; /ComboBox.ItemTemplate> & Lt; / ComboBox & gt;  

व्हाइट संपत्ति पर मिल जाने के बाद मुझे एक अपवाद प्राप्त हुआ है: ऑब्जेक्ट पर कोई संपत्ति सेट नहीं कर सकता #FFFFFFFF क्योंकि यह केवल पढ़ने के लिए राज्य में है । अगर मैं श्वेत (सफेद_) को शून्य के रूप में छोड़ देता हूं, तो सबकुछ ठीक काम करता है।

रिफ्लेक्टर का उपयोग करके मैंने पता लगाया है नीचे जहां समस्या प्रतीत होती है अंदर चयनकर्ता.आइटमसेटऑब्स चयनित , यह नया चयनित आईटम लेता है और निम्न करता है:

  • यदि कंटेनर तत्व निर्भरता ऑब्जेक्ट है, यह कंटेनर से true पर IsSelectedProperty सेट करता है।
  • अन्यथा यदि तत्व एक निर्भरता ऑब्जेक्ट है, तो IsSelectedProperty को तत्व से true ।

    वह दूसरा भाग है, जहां विफलता खेलने में आता है, आपके द्वारा चुने गए ब्रश ऑब्जेक्ट्स केवल पढ़ने के लिए हैं I क्योंकि इस मामले में Selector.ItemSetIsSelected कुछ टूट जाता है, आपके पास दो विकल्प हैं।

    विकल्प 1 , आप बस ब्रश ऑब्जेक्ट पर कॉल करें। (कनवर्टर से लौटा)।

      colors_ = (पी में टाइपफ़ (ब्रश) से)। गेटप्रॉपरटेज़ () का चयन करें (ब्रश) कनवर्टर.कॉन्न्वर्टफ्रेमस्ट्रिंग (पी। )) क्लोन ()) ToList ()।।  

    संपादित करें: आपको विकल्प 1 के साथ जाना चाहिए ... विकल्प 2 समस्या को ठीक करने का लंबा तरीका है

    < मजबूत> विकल्प 2 , आप ब्रश ऑब्जेक्ट को एक और ऑब्जेक्ट में लपेट कर सकते हैं:

      सार्वजनिक वर्ग ब्रशवेपर {सार्वजनिक ब्रश ब्रश {get; सेट; }}  

    फिर आप डेटा टेम्पलेट पथ को अपडेट कर सकते हैं:

      & lt; सीमा पृष्ठभूमि = "{बाध्य पथ = ब्रश}" />  

    और

      & lt; टेक्स्टब्लॉक टेक्स्ट = "{बाध्यकारी पथ = ब्रश}" / & gt;  

    अंत में, आप ViewModel :

      निजी रीडोनली सूची & lt; BrushWrapper & gt; को अपडेट करते हैं। रंग की_; निजी ब्रशविक्रेपर white_; सार्वजनिक रंगदृश्यमोडेल () {colors_ = (पी प्रकार से (ब्रश) में पीट्सप्रोपेर्टीज़ () नए ब्रशवेपर {ब्रश = (ब्रश) कनवर्टर का चयन करें। कॉन्वर्टफ्रमस्ट्रिंग (पी। नेम)})। ToList (); White_ = colors_.Single (b = & gt; बी। ब्रश। टॉस्ट्रिंग () == "# एफएफएफएफएफएफएफ"); } सार्वजनिक सूची & lt; ब्रशवेपर & gt; रंग {वापस {return colors_; }} सार्वजनिक ब्रशविक्रेपर व्हाइट {मिले {वापसी white_; } सेट {if (white_! = Value) white_ = value; }}  

Comments

Popular posts from this blog

ios - Form Sheet content disappearing -

MySql variables and php -

Lists in scheme -