c# - Some irritations with ListView and DataContext -


मैंने निम्नलिखित C # और XAML कोड लिखा है:

  नामस्थान सूचीदृश्य उदाहरण 1 {सार्वजनिक आंशिक कक्षा मुख्य विंडो: विंडो {सार्वजनिक पर्यवेक्षण कलेक्शन & lt; MyColleague & gt; MyCollegues = नया निरीक्षणीय चयन & lt; MyColleague & gt; (); सार्वजनिक मैनविंडो () {myCollegues.Add (नया MyColleague () {नाम = "टिम", उपनाम = "मीयर"}); MyCollegues.Add (नया MyColleague () {नाम = "मार्टिन", उपनाम = "हैनसेन"}); MyCollegues.Add (नया MyColleague () {नाम = "ओलिवर", उपनाम = "ड्रम"}); InitializeComponent (); } सार्वजनिक पर्यवेक्षण योग्यता & lt; MyColleague & gt; माइकर्लेग्स {प्राप्त करें {this.myCollegues return; }}} सार्वजनिक वर्ग MyColleague {सार्वजनिक स्ट्रिंग नाम {get; सेट; } सार्वजनिक स्ट्रिंग उपनाम {get; सेट; }}}   

एक्सएएमएल-कोड:

  & lt; ग्रिड & gt; & Lt; ListView ItemsSource = "{बाध्यकारी}" डेटाकॉन्टेक्स्ट = "{बाइंडिंग रिलेटिव सोरस = {रिलेटिवसॉर लिस्ट} दृश्य उदाहरण 1: मेन वान्डो}, पथ = मायकोलेग्यूज}" & gt; & Lt; ListView.View & gt; & Lt; GridView & gt; & Lt; GridViewColumn हेडर = "नाम" चौड़ाई = "150" DisplayMemberBinding = "{बाध्यकारी नाम}" / & gt; & Lt; GridViewColumn हेडर = "उपनाम" चौड़ाई = "150" DisplayMemberBinding = "{बाध्यकारी उपनाम}" / & gt; & Lt; / GridView & gt; & LT; /ListView.View> & Lt; / ListView & gt; & Lt; / ग्रिड & gt;   

अब मुझे डेटाकॉन्टेक्स्ट सेट करने की आवश्यकता है, लेकिन इस समय मुझे कुछ परेशानियां हैं I डेटाकॉन्टेक्स-सिंटैक्स सही है?

DataContext ; कोई भी स्वाभाविक रूप से सही नहीं है।

यह ध्यान देने योग्य है कि किसी भी आइटम पर DataContext सेट करने का कोई कारण नहीं है, यदि आपको सभी की जरूरत है तो एक संपत्ति ( ItemsSource , इस मामले में)। DataContext को बाध्य करने वाले कई गुणों को सरल करता है, क्योंकि सभी बाइंडिंग समान संदर्भ का उपयोग करते हैं।

यदि आप किसी भी कोड-पीछे बिना बाध्यकारी डेटा करना चाहते हैं (जैसा आपने एक टिप्पणी में कहा था), आपके द्वारा चुना गया उदाहरण बहुत अच्छा नहीं है, क्योंकि आप कोड में ऑब्जेक्ट बना रहे हैं-पीछे पैरामीटर रहित निर्माता के साथ एक वर्ग बनाने का प्रयास करें, उदा।:

  सार्वजनिक वर्ग MyColleagueCollection: ObservableCollection & lt; MyColleague & gt; {सार्वजनिक MyColleagueCollection () {जोड़ें (नया MyColleague () {नाम = "टिम", उपनाम = "मीयर"}); जोड़ें (नया MyColleague () {नाम = "मार्टिन", उपनाम = "हैनसेन"}); जोड़ें (नया MyColleague () {नाम = "ओलिवर", उपनाम = "ड्रम"}); }}   

तब आप ऐसा कर सकते हैं:

  & lt; ListView & gt; & LT; ListView.ItemsSource & gt; & LT; स्थानीय: MyColleagueCollection / & gt; & LT; /ListView.ItemsSource> ... & lt; / ListView & gt;   

या आप DataContext को सेट कर सकते हैं, और ItemsSource को "{बाध्यकारी}" सेट कर सकते हैं। या एक संसाधन शब्दकोश में ऑब्जेक्ट बनाएं, और StaticResource का उपयोग करके बाध्य करें।

आप अपने संग्रह को संपत्ति के रूप में भी बना सकते हैं (कोई फ़ील्ड नहीं, जैसा कि x0r सही ढंग से बताता है) विंडो वर्ग और ऐसा करें:

  & lt; विंडो डेटाकॉन्टेक्स्ट = "{बाध्यकारी रिलेटिव सोरस = {रिलेटिव एसर्स}} ... ...   

जो अब विंडो स्वतः डेटा संदर्भ वस्तु बनाता है, विंडो में किसी भी तत्व को relativeSource का उपयोग किए बिना अपनी संपत्तियों को सीधे बाइंड करने की अनुमति देता है।

या (हम कहीं भी नहीं हैं), आप विंडो को एक नाम दे सकते हैं, और उसके बाद इसे नाम से बाँध सकते हैं:

  & lt; ListView ItemsSource = `{बाध्यकारी तत्व नाम = मायवंडो, पथ = MyCollection} "...   

चलो भी एक ObjectDataProvider का उपयोग करने में नहीं आते हैं।

अधिकांश लोग क्या कर रहे हैं - यह है जैसा कि "सही" उत्तर के करीब के रूप में आप खोजना चाहते हैं - मुख्य विंडो के लिए एक दृश्य मॉडल वर्ग बना रहा है, इसे खिड़की के constr Uctor, और विंडो के DataContext को उस ऑब्जेक्ट पर सेट करना उस बिंदु से, किसी भी दृश्य से कि मुख्य विंडो प्रदर्शित उस दृश्य मॉडल की संपत्ति के लिए बाध्य है। वास्तव में अच्छे काम के उदाहरण के लिए मॉडल / देखें / व्यू मॉडल पैटर्न पर जोश स्मिथ का आलेख देखें।

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

Comments

Popular posts from this blog

mysql - BLOB/TEXT column 'value' used in key specification without a key length -

c# - Using Vici cool Storage with monodroid -

python - referencing a variable in another function? -