2010-08-24 13 views
8

में एक क्रमबद्ध ऑब्जर्जेबल कोलेक्शन से बांधें मेरे पास मेरे विंडोज फोन 7 एप्लिकेशन में डेटा ऑब्जेक्ट्स की एक सूची है जिसे MyObjectList कहा जाता है, जो ObservableCollection<MyObject> प्राप्त करता है। मैं सूची को App की सार्वजनिक संपत्ति में मेमोरी में रखता हूं जिसे MyObjects कहा जाता है। मेरा लक्ष्य डेटा को ListBox पर बांधना है और इसे MyObject.Name द्वारा क्रमबद्ध किया गया है। एक लिस्टबॉक्स

वर्तमान में, मैं नाम MyObjectsList साथ XAML में एक ListBox है और निर्माता में निम्न कोड से लिंक करने के लिए:

public MyObjectListView() 
{ 
    InitializeComponent(); 
    this.MyObjectsList.ItemsSource = ((App)App.Current).MyObjects; 
} 

यह काम करता है महान। मैं MyObjects पर आइटम जोड़ता हूं और वे ListBox में दिखाई देते हैं। हालांकि, जब सूची में दिखाई देता है तो डेटा को नाम से क्रमबद्ध नहीं किया जाता है। मैं डेटा हल हो पाने के लिए निम्न परिवर्तन करने की कोशिश की:

this.MyObjectsList.ItemsSource = ((App)App.Current).MyObjects 
             .OrderBy(x => x.Name) 

लेकिन जब मैं ऐसा, मैं नहीं दिख रहा है किसी भी वस्तुओं ListBox हल या अन्यथा में परिलक्षित।

मैं क्या कर सकता हूं ताकि जब मैं अपने ObservableCollection पर कोई आइटम जोड़ूं, तो यह द्वारा ListBox में सॉर्ट किया गया है?

+4

किसी आइटमसोर्स पर लिंक का उपयोग करने से पर्यवेक्षण योग्यता के 'अवलोकन' बिट को अक्षम कर दिया जाएगा –

उत्तर

0

http://mokosh.co.uk/post/2009/08/04/how-to-sort-observablecollection/ पर एक नज़र डालें।

यह बताता है कि अंतर्निहित आइटम.Sort() विधि का पर्दाफाश करने के लिए ऑब्जर्जेबल कोलेक्शन का विस्तार कैसे करें और फिर श्रोताओं को सूचित करें कि संग्रह बदल गया है।

इसके अलावा, This Post here.. इससे आपकी सहायता कर सकता है। यह संग्रह दृश्य का उपयोग करता है।

+0

आपके द्वारा संदर्भित पहला लिंक '' का उपयोग करने के बारे में एक महान लेख की ओर इशारा करता है। एक बार जब मैंने सही नेमस्पेस का उपयोग करने के लिए (हमेशा एक्सएएमएल के साथ एक चुनौती) का पता लगाया, तो यह पूरी तरह से काम करता था। धन्यवाद! –

+0

पहला लिंक मृत – vwegert

4

आप अपने मानक ObservableCollection के बजाय एक क्रमबद्ध संग्रह का उपयोग कर सकते हैं। किसी को यहाँ एक SortedObservableCollection लिखा है:

http://phillters.wordpress.com/2009/05/14/sortedobservablecollection/

+0

प्रतीत होता है यह कार्यान्वयन वास्तव में खराब है क्योंकि इसमें एक क्रमबद्ध संग्रह पर ओ (एन) सम्मिलन है। मैं इसके खिलाफ निश्चित रूप से सलाह देता हूं। – Benlitz

+0

मुझे नहीं लगता कि किसी के पास ओ (एन) एक समस्या होने के कारण पर्याप्त संग्रह होगा। – roim

1

यह सिल्वरलाइट के लिए आप में मदद नहीं करता है, लेकिन WPF 3.5/4 के लिए, वहाँ यह करने के लिए एक बेहतर तरीका शामिल CollectionView

11

समस्या है आपके उदाहरण के साथ ऑर्डरबी विधि एक पर्यवेक्षित चयन के बजाय एक IOrderedEnumerable प्रकार ऑब्जेक्ट देता है।

यहां कुछ ऐसा है जो आप कुछ अन्य उत्तरों जैसे कस्टम संग्रह को लागू किए बिना कर सकते हैं।

var sortedMyObjects = new ObservableCollection<MyObject>(); 
foreach (var myobj in ((App)App.Current).MyObjects.Orderby(x => x.Name)) 
    sortedMyObjects.Add(myobj); 
this.MyObjectsList.ItemsSource = sortedMyObjects; 

अन्य उत्तर सभी व्यवहार्य विकल्प सुझाते हैं, लेकिन इससे सवाल में समस्या हल हो जाएगी।

एफडब्ल्यूआईडब्ल्यू, सिल्वरलाइट 4 में एक पेज्ड कोलेक्शन व्यू है, लेकिन विंडोज फोन 7 की सिल्वरलाइट सिल्वरलाइट 3 पर आधारित है और यह उपलब्ध नहीं है। मैं केवल इसका सुझाव दे रहा हूं कि आप इसे एसपी 4 को अपडेट करने वाले WP7 की प्रत्याशा में इसके बारे में जागरूक रखें।

+0

यह मेरे लिए असाधारण रूप से काम किया! इसका लाभ उठाने के लिए मेरे सभी कोड को कनवर्ट करना। – pearcewg

+0

ग्रेट समाधान। – peterept

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