2010-02-11 12 views

उत्तर

15

समस्या यह है कि INotifyCollectionChanged इंटरफ़ेस जो ईवेंट हैंडलर शामिल स्पष्ट रूप से कार्यान्वित किया जाता है, जिसका अर्थ है आप पहली बार ItemCollection कास्ट करने के लिए है ईवेंट हैंडलर इस्तेमाल किया जा सकता से पहले है:

public MyWindow() 
{ 
    InitializeComponent(); 

    ((INotifyCollectionChanged)mListBox.Items).CollectionChanged += 
     mListBox_CollectionChanged; 
} 

private void mListBox_CollectionChanged(object sender,  
    NotifyCollectionChangedEventArgs e) 
{ 
    if (e.Action == NotifyCollectionChangedAction.Add) 
    { 
     // scroll the new item into view 
     mListBox.ScrollIntoView(e.NewItems[0]); 
    }  
} 

Ref

नमूदार संग्रह के बारे में जोश सलाह भी विचार किया जाना चाहिए।

+0

धन्यवाद मिच! इसने काम कर दिया! हालांकि, मुझे इस अजीब बग का सामना करना पड़ा। सूचीबॉक्स को संग्रहव्यूसोर्स से जोड़ा जाता है जहां स्रोत एक XMLDocument है। मैंने XPath को .XPath = "/ रूटनोड/चाइल्ड नोड" के रूप में निर्दिष्ट किया है। अजीब बग है कि "कभी-कभी" जब मैं अपने आवेदन शुरू, लिस्टबॉक्स प्रदर्शित करते हैं, यह एक आइटम (चाहिए नहीं) शामिल हैं और जब मैं ListBoxItem की जाँच की, मद XMLDocument उस में होने में है कि "" यह तब होता है कहना 2/5 बार मैं पिछले प्रश्न पोस्ट ताकि मैं जब एक आइटम aded है, लेकिन whn चौथाई अजीब behvior hapen, मैं एक NotifyCollectionChangedAction.Reset – lionheart

+0

कोड है कि XML दस्तावेज़ भरता देखे बिना कहना मुश्किल receiv पता चल जाएगा। शायद इसे एसिंक लोडिंग के साथ करना है। लेकिन मुझे अभी भी विश्वास है कि आप एक मॉडल के खिलाफ लड़ रहे हैं डब्ल्यूपीएफ आपको आइटम चयन के आंतरिक में खोदने के लिए मार्गदर्शन करने की कोशिश कर रहा है। जब तक आप नियंत्रण लिख रहे हों, आपको वास्तव में आइटम कोलेक्शन या लिस्टबॉक्स इटिम के बारे में कभी भी सोचना नहीं चाहिए। '' Sender' शायद का उपयोग कर – Josh

+0

वहाँ किसी भी तरह से घटना 'निजी शून्य mListBox_CollectionChanged (वस्तु प्रेषक, NotifyCollectionChangedEventArgs ई) से कंटेनर (' mListBox') प्राप्त करने के लिए है? – Bolu

2

एक अलग दृष्टिकोण रखना। ObservableCollection बनाएं (जिसमें ऐसा event है) और इस संग्रह में ListBox के आइटमसोर्स सेट करें। दूसरे शब्दों में, डब्ल्यूपीएफ में आपको समस्या के बारे में अलग-अलग विचार करना चाहिए। नियंत्रण जरूरी नहीं है कि क्या संशोधित किया जा रहा है ... इसके पीछे संग्रह है।

अद्यतन
मिच का जवाब जो दर्शाता है कि आपके बाध्यकारी स्रोत वास्तव में एक XML दस्तावेज, मैं XML दस्तावेज़/तत्व/आदि की XObject.Changed घटना के लिए ऊपर hooking में रखने का सुझाव देते है पर अपनी टिप्पणी के आधार पर। यह आपको एक्सएमएल संरचना के बारे में जानकारी बदल देगा - आइटमकोलेक्शन नहीं जो एक कार्यान्वयन विवरण है जिसे आपको विचार करने की आवश्यकता नहीं है। उदाहरण के लिए, ItemCollection (या कोई INotifyCollectionChanged) प्रत्येक परिवर्तन के लिए एक व्यक्तिगत ईवेंट की गारंटी नहीं देता है। जैसा कि आपने नोट किया है, कभी-कभी आपको एक सामान्य रीसेट अधिसूचना मिल जाएगी।

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