2011-04-27 20 views
14

मान लीजिए मैं कर्मचारी वर्ग के ObservableCollection हैछंटाई ObservableCollection

public ObservableCollection<Employee> employeeCollection = new ObservableCollection<Employee>(); 

public class Employee 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public double MobileNumber { get; set; } 
    public string City { get; set; } 
    public int Age { get; set; } 

    public Employee() {} 
} 

अब मैं कॉम्बो बक्से में से उपयोगकर्ता द्वारा ObservableCollection ("employeeCollection") उचित चयन द्वारा सॉर्ट करने के लिए कोशिश कर रहा हूँ [यह हो जाएगा ... .Sort तक प्रथम ... .Sort by MobileNumber आदि ...] ..

और यह की आवश्यकता है अवलोकन संग्रह को क्रमबद्ध करें ...। यह मतलब "var" के रूप में नहीं होना चाहिए यह होना चाहिए ObservableCollection<Employee>

तो मैं इसे वापस “ItemsControl” की “ItemsSource” संपत्ति के लिए प्रदान कर सकते हैं ...

धन्यवाद ......

+2

क्यों आप संग्रह को सॉर्ट करना चाहते हैं? आप डेटा बाइंडिंग पर सॉर्टिंग भी कर सकते हैं। – PVitt

+0

[मेरे आवेदक में "आइटम controle" प्रत्येक कर्मचारी को देखने योग्य संग्रह में प्रदर्शित करता है अब मैं अवलोकन संग्रह को सॉर्ट करना चाहता हूं ताकि मेरे आवेदन के यूआई को देखने योग्य संग्रह के अनुसार बदल दिया जाएगा ...... धन्यवाद] – Pritesh

+0

अच्छा होगा जब आप कोई जवाब स्वीकार कर सकें ... – PVitt

उत्तर

27

आप सॉर्ट कर सकते हैं संग्रह के दृश्य को संग्रहित करने के बजाय स्वयं संग्रह:

// xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase" 
<myView.Resources> 
    <CollectionViewSource x:Key="ItemListViewSource" Source="{Binding Itemlist}"> 
     <CollectionViewSource.SortDescriptions> 
      <scm:SortDescription PropertyName="SortingProperty" /> 
     </CollectionViewSource.SortDescriptions> 
    </CollectionViewSource> 
</myView.Resources> 

और फिर आप ItemSource रूप CollectionViewSource उपयोग कर सकते हैं:

ItemsSource="{Binding Source={StaticResource ItemListViewSource}}" 
+1

ध्यान दें कि 'PropertyName' बाइंडिंग का उपयोग नहीं कर सकता है। यह सीधे निम्न रन-टाइम त्रुटि में परिणाम देता है: 'ए' बाइंडिंग '' PropertyName 'प्रकार की' PropertyName 'प्रॉपर्टी पर सेट नहीं किया जा सकता है। एक 'बाध्यकारी' केवल एक निर्भरता की निर्भरता प्रजनन पर सेट किया जा सकता है। –

+0

@ ओन्ड्रेज जेनेसेक क्या यह नया व्यवहार है? मैं कसम खाता हूँ कि मैंने इसे इस तरह इस्तेमाल किया। लेकिन मुझे इसे जांचने के लिए अब कोड तक पहुंच नहीं है। – PVitt

+0

@Well, यह अत्यधिक प्रचार योग्य नहीं है कि आपने इसे इस तरह इस्तेमाल किया। संपत्ति 'संपत्ति नाम' नामक सभी के बाद होती है जो इंगित करती है कि यह एक संपत्ति का एक स्ट्रिंग नाम ले सकता है, न कि सीधे बाध्यकारी। लेकिन मैं डब्ल्यूपीएफ के लिए नया हूं, मैं केवल इस पर ठोकर खा रहा हूं क्योंकि मैं समाधान की तलाश कर रहा था और मैंने इसे कार्यान्वित किया, इसलिए संभव है कि यह पहले से ही काम करे। –

1

आप अपने आप को सॉर्ट करने के लिए की जरूरत नहीं है, लेकिन WPF यह तुम्हारे लिए क्या कर सकते हैं। उदाहरण के लिए SortDescription देखें।

3

मुझे लगता है कि पीवीट का सबसे अच्छा समाधान हो सकता है ... हालांकि, मुझे यह सॉर्ट किए गए ऑब्सर्जेबल कोलेक्शन क्लास को शायद मदद मिल सकती है?

http://softcollections.codeplex.com/

+1

एक क्रमबद्ध अवलोकन संग्रह का एक वैकल्पिक कार्यान्वयन: [ObservableSortedList ] (https://bitbucket.org/rstarkov/wpfcrutches/src/tip/ObservableSortedList.cs)। –

2

मैं एक ObservableCollectionView जो छँटाई का समर्थन करता है और फ़िल्टरिंग एक लैम्ब्डा का उपयोग कर (LINQ की तरह लेकिन रहते हैं) और आइटम ट्रैकिंग लागू की:

https://mytoolkit.codeplex.com/wikipage?title=ObservableCollectionView

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