2009-08-14 9 views
36

मैं एक ListBox में तार सुलझाने के लिए की जरूरत है, लेकिन यह DataContext के माध्यम से एक और घटक द्वारा दृश्य मॉडल के लिए बाध्य है। तो मैं this example में XAML में दृश्य मॉडल को सीधे चालू नहीं कर सकता, जो ObjectDataProvider का उपयोग करता है।मैं केवल XAML का उपयोग करके सूची बॉक्स को कैसे क्रमबद्ध कर सकता हूं और कोई कोड-पीछे नहीं?

मेरी XAML में:

<ListBox ItemsSource="{Binding CollectionOfStrings}" /> 

मेरे विचार मॉडल में:

public ObservableCollection<string> CollectionOfStrings 
{ 
    get { return collectionOfStrings; } 
} 

एक और घटक में:

view.DataContext = new ViewModel(); 

वहाँ के पीछे कोई कोड है! तो पूरी तरह से एक्सएएमएल का उपयोग करके, मैं सूची बॉक्स में आइटम कैसे क्रमबद्ध करूं? फिर, एक्सएएमएल दृश्य मॉडल के तत्कालता का मालिक नहीं है।

उत्तर

80

का प्रयोग करें एक CollectionViewSource:

<CollectionViewSource x:Key="SortedItems" Source="{Binding CollectionOfStrings}" 
    xmlns:scm="clr-namespace:System.ComponentModel;assembly=Win‌​dowsBase"> 
    <CollectionViewSource.SortDescriptions> 
     <scm:SortDescription PropertyName="SomePropertyOnYourItems"/> 
    </CollectionViewSource.SortDescriptions> 
</CollectionViewSource> 

<ListBox ItemsSource="{Binding Source={StaticResource SortedItems}}"/> 

आप एक कस्टम वी एम क्लास में अपने तार लपेट के लिए, ताकि आप और अधिक आसानी से छँटाई व्यवहार लागू कर सकते हैं चाहते हो सकता है।

+1

धन्यवाद, केंट! CollectionViewSource पर स्रोत विशेषता को बाध्य करना मेरे लिए अनुपलब्ध लिंक था। मैं इसकी सराहना करता हूं। इस मामले में, मैं एक कस्टम वीएम कक्षा नहीं चाहता था, इसलिए मैंने प्रॉपर्टीनाम विशेषता को छोड़ दिया, जो स्पष्ट रूप से स्ट्रिंग संग्रह के लिए काम करता है। –

+4

इसके अलावा, वहां किसी भी दर्शक के लिए, सॉर्ट डिस्क्रिप्शन टैग एक दिशा विशेषता लेता है। –

+3

क्या होगा यदि ListBox किसी ऑब्जेक्ट की एक संपत्ति का प्रतिनिधित्व करने वाले डेटा टेम्पलेट का हिस्सा है जो आइटमों की एक सूची है। क्या मैं किसी भी तरह ListBox के अंदर सॉर्टिंग नहीं कर सकता? –

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

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