observablecollection - WPF ListBox not binding to INotifyCollectionChanged or INotifyPropertyChanged Events -


मेरे पास निम्न परीक्षण कोड है:

  निजी वर्ग someItem {सार्वजनिक स्ट्रिंग शीर्षक} {वापसी "कुछ"; }} सार्वजनिक bool पूरा किया {get {return false; } सेट {}}} निजी वर्ग SomeCollection: IEnumerable & lt; SomeItem & gt ;, INotifyCollectionChanged {निजी IList & lt; SomeItem & gt; _items = नई सूची & lt; SomeItem & gt; (); सार्वजनिक शून्य जोड़ें (कुछ आइटम आइटम) {_items.Add (आइटम); संग्रह परिवर्तित (यह, नया NotifyCollectionChangedEventArgs (NotifyCollectionChangedAction.Reset)); } # क्षेत्रीय आईएनएनमेरेबल & lt; SomeItem & gt; सदस्य सार्वजनिक आईएनआईएमएमएटर & lt; SomeItem & gt; GetEnumerator () {वापसी _items.GetEnumerator (); } #ेंड्रियन # क्षेत्रीय आईएनएनमेरेबल सदस्य सिस्टम। कोलेक्शन.आईएनएनएमएमेंटर सिस्टम। कोलेक्शन.आईएनएनएफ़ेबल.गेटएनेमेटरेटर () {return_items.GetEnumerator (); } # मध्यांतर # क्षेत्रीय अधिसूचनासंचारकैच्छित सदस्य सार्वजनिक कार्यक्रम अधिसूचनासंपादित करें चेंजेडएवेंटहैंडलर संग्रह परिवर्तित; #endregion} निजी SomeCollection संग्रह = नया SomeCollection (); निजी शून्य Expander_Expanded (ऑब्जेक्ट प्रेषक, RoutedEventArgs ई) {var expander = (Expander) प्रेषक; Var list = expander.DataContext आईटस्कलिस्ट के रूप में; Var listBox = (ListBox) expander.Content; //list.Tasks.CollectionChanged + = संग्रह परिवर्तित; संग्रह। जोड़ें (नया कुछआइटम ()); संग्रह। जोड़ें (नया कुछआइटम ()); ListBox.ItemsSource = संग्रह; }  

और एक्सएएमएल

  & lt; लिस्ट बॉक्स नाम = "टास्क लिस्ट लिस्ट" आइटमस्सोर्स = "{बाइंडिंग}" बॉर्डरटिचनेस = "0" आइटम कंटैनेर शैली = "{स्टेटिक रिसोर्स कोई भी चयनित नहीं) "& gt; & LT; ListBox.ItemTemplate & gt; & LT; DataTemplate & gt; & Lt; विस्तारक विस्तारित = "Expander_Expanded" & gt; & LT; Expander.Header & gt; & Lt; स्टैकपैनेल ओरिएंटेशन = "क्षैतिज" & gt; & Lt; TextBlock Text = "{बाध्यकारी नाम}" / & gt; & Lt; पाठ बॉक्स कुंजी = "TextBox_KeyUp" चौड़ाई = "200" / & gt; & Lt; बटन नाम = "छुपाएं" क्लिक = "छिपाएँ" और "gt;" & Lt; TextBlock Text = "hide" / & gt; & Lt; / बटन & gt; & Lt; / StackPanel & gt; & LT; /Expander.Header> & Lt; लिस्ट बॉक्स नाम = "टास्कलिस्ट" आइटम्स सोर्स = "{बाइंडिंग}" आइटमटैम्प्लेट = "{स्टेटिक रिसोर्स कार्यआईटीम}" / & gt; & Lt; / Expander & gt; & Lt; / DataTemplate & gt; & LT; /ListBox.ItemTemplate> & Lt; / ListBox & gt;  

बाह्य सूचीबॉक् लोड पर आबाद हो जाता है जब विस्तारक विस्तारित हो जाता है तो मैं आंतरिक सूचीबॉक्स की ItemsSource संपत्ति सेट करता हूं (इस कारण मैं बाइंडिंग का उपयोग करने के बजाय यह सुनता हूं यह ऑपरेशन काफी धीमा है और मैं केवल इसे उपयोग करना चाहता हूं आइटम देखने के लिए चुनता है) आंतरिक सूची बॉक्स ठीक प्रदान करता है, लेकिन यह वास्तव में संग्रह पर संग्रह परिवर्तित ईवेंट की सदस्यता नहीं देता है मैंने इसे आइकलिंग के बजाय IEnumerable के साथ की कोशिश की है और INotifyPropertyChanged के साथ-साथ INotifyCollectionChanged को बदलने के साथ INotifyPropertyChanged । एकमात्र तरीका मैं वास्तव में यह काम कर सकता हूं मेरा कुछ कलेक्शन वर्ग को आना और अवलोकनकणीय चयन & lt; SomeItem & gt; से प्राप्त होता है। ObsavableCollection का उपयोग करने के बजाय मेरी अपनी INotifyCollectionChanged भूमिका करने की कोशिश करने के लिए मेरा तर्क है क्योंकि मैं वास्तविक कोड में COM संग्रह लपेट रहा हूं यह संग्रह ऐड / बदलें / निकालने पर अधिसूचना देगा और मैं इन्हें डब्ल्यूपीएफ के लिए इनोटिफ़ ईवेंट में कनवर्ट करने की कोशिश कर रहा हूं।

आशा है कि यह काफी स्पष्ट है (इसकी देर)।

निरीक्षणात्मक संकलन & lt; T & gt; भी लागू करता है INotifyPropertyChanged । जैसा कि आप संग्रह केवल एक IEnumerable & lt; T & gt; के लिए ईवेंट बनाने के लिए आपके पास कोई गुण नहीं है, लेकिन ObservableCollection & lt; T & gt; create PropertyChanged गणना और आइटम [] गुणों के लिए ईवेंट। आप अपने संग्रह को ObservableCollection & lt; T & gt; से IList & lt; T & gt; से प्राप्त करके और INotifyPropertyChanged को कार्यान्वित कर सकते हैं। मुझे नहीं पता कि यह आपकी समस्या को ठीक करेगा, हालांकि।


Comments

Popular posts from this blog

c# - ListView onScroll event -

PHP - get image from byte array -

Linux Terminal Problem with Non-Canonical Terminal I/O app -