WPF: Binding to ObservableCollection in ControlTemplate is not updated -
मैंने अपने कस्टम नियंत्रण MyControl
के लिए एक ControlTemplate
बनाया है।
MyControl
से प्राप्त System.Windows.Controls.Control
और निम्न गुण को परिभाषित करता है सार्वजनिक पर्यवेक्षणसंपादित करें & lt; MyControl & gt; बच्चे {प्राप्त करें; संरक्षित सेट; }
।
नेस्टेड बाल नियंत्रण को प्रदर्शित करने के लिए मैं एक ItemsControl
( StackPanel
) का उपयोग कर रहा हूं जो कि GroupBox
। यदि कोई बाल नियंत्रण नहीं है, तो मैं समूह बॉक्स
को छिपाना चाहता हूं।
एप्लिकेशन स्टार्टअप पर सबकुछ ठीक काम करता है: समूह बॉक्स और बाल नियंत्रण दिखाए जाते हैं, अगर बच्चा संपत्ति शुरू में कम से कम एक तत्व अन्य मामले में यह छिपा हुआ है।
समस्या तब शुरू होती है जब कोई उपयोगकर्ता एक बच्चे के नियंत्रण को एक खाली संग्रह में जोड़ता है। समूह बॉक्स
की दृश्यता अभी भी ढह गई है। वही समस्या तब होती है जब संग्रह से अंतिम बाल नियंत्रण हटा दिया जाता है। समूहबॉक्स
अभी भी दृश्यमान है एक अन्य लक्षण यह है कि HideEmptyEnumerationConverter
कनवर्टर को कॉल नहीं किया जाता है। बिना रिक्त संग्रह को बाल नियंत्रण जोड़ने / हटाने से अपेक्षित काम करता है।
क्या निम्न बंधन में गलत है? जाहिर है यह एक बार काम करता है, लेकिन अद्यतन नहीं मिलता है, हालांकि मैं जिस प्रकार से संग्रहित हूं, वह प्रकार ObsavableCollection
।
ऑब्जेक्ट वैल्यू, टाइप टाईप टाईप, ऑब्जेक्ट पैरामीटर, कल्चरइन्फ़ो कल्चर) {इंट मदकाउंट = ((आईइनेमरेबल) वैल्यू) .स्टाट & लेफ्टिनेंट; ऑब्जेक्ट & gt; ()। गणना (); वापसी आइटमकाउंट == 0? दृश्यता। Collapsed: दृश्यता। दृश्यमान; } पब्लिक ऑब्जेक्ट कन्वर्टबैक (ऑब्जेक्ट वैल्यू, टाईप टाईप टाइप करें, ऑब्जेक्ट पैरामीटर, कल्चर इन्फ़ो कल्चर) {नया नॉन इमिलेटेड एक्सपशन (); } #ेंड्रियन}
एक और अधिक सामान्य प्रश्न: आप लोग बाइंडिंग कैसे डिबग करते हैं? यह पाया () लेकिन फिर भी मुझे यह करना बहुत कठिन लगता है।
मुझे किसी भी मदद या सुझाव के लिए खुशी है।
समस्या यह है कि आपका बच्चे
संपत्ति खुद ही बदलती नहीं है, केवल इसकी सामग्री चूंकि संपत्ति के मूल्य में कोई बदलाव नहीं होता है, बाध्यकारी पुनर्व्यवस्थित नहीं है। आपको क्या करने की आवश्यकता है गणना संग्रह की संपत्ति से जुड़ी है। आप इसे प्राप्त कर सकते हैं सबसे आसान तरीका अपने टेम्पलेट में
DataTrigger
के साथ है:
& lt; ControlTemplate TargetType = "{x: प्रकार MyControl}" & gt; & Lt;! - ... अन्य सामान जो काम करता है ... - & gt; & Lt;! - बाल घटकों - & gt; & Lt; GroupBox x: नाम = "जीबी" हैडर = "बच्चे" & gt; & Lt; आइटमोंकंट्रोल आइटम्स सोर्स = "{बच्चे के लिए टेम्पलेटबैंकिंग}" / & gt; & Lt; / GroupBox & gt; & LT; ControlTemplate.Triggers & gt; & Lt; DataTrigger बाध्यकारी = "{बाध्यकारी पथ = बच्चे। संख्या, रिलेटिव सोरस = {रिलेटिव सोरस टेम्पलेटेड} माता-पिता" मूल्य = "0" & gt; & Lt; सेटर लक्ष्यनाम = "जीबी" संपत्ति = "दृश्यता" मान = "संक्षिप्त" / & gt; & Lt; / DataTrigger & gt; & LT; /ControlTemplate.Triggers> & Lt; / ControlTemplate & gt;
Comments
Post a Comment