2011-06-07 9 views
7

मैं कस्टम ItemsSource साथ ListBox उपयोग कर रहा हूँ:कस्टम आइटम्स स्रोत के साथ ListBox को रीफ्रेश करने का सबसे आसान तरीका?

this.ListOfPersonsListBox.ItemsSource = (List<Person>)ListOfPersons.AllPersons; 

ListOfPersons एक स्थिर वर्ग तो यह INotifyPropertyChanged है और न ही IObservableCollection लागू नहीं कर सकते है।

सूची को अपडेट करने के बाद मेरी सूची बॉक्स को फिर से निकालने का सबसे आसान तरीका क्या है? मेरे वर्तमान कोड काम करता है, लेकिन मैं एक क्लीनर समाधान खोजने के लिए करना चाहते हैं:

private void SyncButton_Click(object sender, EventArgs e) 
    { 
     ListOfPersons.Sync(); 
     this.ListOfPersonsListBox.ItemsSource = null; 
     this.ListOfPersonsListBox.ItemsSource = ListOfPersons.AllPersons; 
    } 
+0

क्या आप स्पष्ट कर सकते हैं कि ListOfPersons को स्थिर वर्ग क्यों होना चाहिए? यदि यह एकाधिक पृष्ठों के बीच सुविधाजनक पहुंच के लिए है, तो इसे एप्लिकेशन-व्यापी संपत्ति बनाने पर विचार करें। फिर आप एक पर्यवेक्षण चयन का उपयोग कीबोर्डपी के रूप में कर सकते हैं। –

+0

@JoshEarl क्या आप कृपया "आवेदन-व्यापी संपत्ति" से क्या मतलब समझ सकते हैं? मैं एक नौसिखिया हूं और इस तरह की चीज के बारे में कभी नहीं सुना ... –

उत्तर

8

एक List के बजाय एक ObservableCollection उपयोग पर विचार करें। यह आंतरिक रूप से INotifyPropertyChanged लागू करता है। आप अपनी सूची के माध्यम से लूप कर सकते हैं और प्रत्येक तत्व को नए ObservableCollection ऑब्जेक्ट में जोड़ सकते हैं और इसे ListBox पर बाध्य कर सकते हैं।

आप अक्सर परिवर्तित करने के लिए जा रहे हैं, तो आप सिर्फ एक Extension method

public static ObservableCollection<T> ToObservableCollection<T>(this IEnumerable<T> myList) 
{ 
    var oc = new ObservableCollection<T>(); 
    foreach (var item in myList) 
     oc.Add(item); 
    return oc; 
} 
+0

आप एक सूची से सीधे 'ObservableCollection' बना सकते हैं। 'var oc = new ObservableCollection (ListOfPersons.AllPersons);' – ChrisF

+2

@ChrisF - WP7 पर Silverlight में 'ObservableCollection (सूची ) के लिए कोई अधिभार नहीं है। एमए में उपलब्ध हो सकता है क्योंकि एसएल 4 चलाता है। – keyboardP

+0

आह हाँ - यह एक एसएल 4 चीज है। – ChrisF

1

Shaeak,

Application वर्ग एप्लिकेशन जीवन चक्र की अवधि के लिए रहता है बना सकते हैं। यदि आपके पास कुछ ऐसा है जो ऐप के जीवन भर में एकाधिक पृष्ठों से पहुंच योग्य होने की आवश्यकता है, तो एक समाधान आंशिक वर्ग बनाना है जो Application से प्राप्त होता है और इस आंशिक वर्ग पर एक संपत्ति बनाता है।

This article पृष्ठ के नीचे के रास्ते के बारे में दो तिहाई स्पष्टीकरण है।

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