2011-04-07 55 views
4

如果我有未排序的集合,是否有一種簡單的方法來綁定和排序它。我想這樣做在XAML(沒有LINQ的,不C#)如何綁定和排序集合

如果我的DataContext有一個屬性,比如說,MyItems,很容易綁定反對:

<ListBox ItemsSource={Binding MyItems}/> 

不過,我會喜歡分類。使用CollectionViewSource應該是解決方案,但它並沒有爲我工作:

<ListBox> 
<ListBox.ItemsSource> 
    <Binding> 
    <Binding.Source> 
    <CollectionViewSource Source={Binding MyItems}/> 
    </Binding.Source> 
    </Binding> 
</ListBox.ItemsSource> 
</ListBox> 

在這一點上,我的列表框失去它的元素。 我錯過了一些明顯的東西嗎?

回答

8

您可以定義CollectionViewSource作爲一種資源,並提供您所需的排序...

<Window.Resources> 
    <CollectionViewSource x:Key="cvs" Source="{Binding MyItems}"> 
     <CollectionViewSource.SortDescriptions> 
      <scm:SortDescription PropertyName="MyItemName" Direction="Ascending"/> 
     </CollectionViewSource.SortDescriptions> 
    </CollectionViewSource> 
</Window.Resources> 
<Grid> 
    <ListBox ItemsSource="{Binding Source={StaticResource cvs}}"/> 
</Grid> 

scm命名空間是xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"

+0

謝謝你的建議。但是,我的列表框位於DataTemplate中,因此我無法使用資源。它爲什麼作爲資源而不是作爲綁定的來源? – user380719 2011-04-07 18:27:46

+0

啊你原來的答案沒有SortDescriptions,所以我回答了它,你編輯包括 – xdumaine 2011-04-07 18:34:03

0

,其中從MyItems讀取代碼隱藏創建CollectionViewSource,你的列表框綁定到

<ListBox ItemsSource="{Binding MyCollectionViewSource"} /> 
+0

-1 OP特別指出他們希望避免C#(代碼後面) – 2011-04-07 18:10:03

+2

上的每個項目的屬性不值得一個-1。 OP確實表示,但未來尋找答案的人可能會發現@ Rachel的投入是有價值的。 – Robaticus 2011-04-07 18:22:37

+0

@Robaticus每個人都在-1上彎曲變形。由於OP明確指出不使用C#,該線必須在某處繪製。如果OP沒有明確表示不想使用C#,那麼答案會很好。試圖保持與問題相關的答案都是。 – 2011-04-07 18:27:40

0

無論其他答案其實地址排序。他們都對CollectionViewSource是正確的,但你可以用它來做排序,CollectionViewSource.SortDescription。從here截取和修改:

<Window.Resources> 

    <src:MyItems x:Key="MyItems"/> 

    <CollectionViewSource Source="{StaticResource MyItems}" x:Key="cvs"> 
    <CollectionViewSource.SortDescriptions> 
     <scm:SortDescription PropertyName="CityName"/> 
    </CollectionViewSource.SortDescriptions> 
    </CollectionViewSource> 
</Window.Resources> 

<ListBox ItemsSource="{Binding Source={StaticResource cvs}}" 
    DisplayMemberPath="CityName" Name="lb"> 
    <ListBox.GroupStyle> 
    <x:Static Member="GroupStyle.Default"/> 
    </ListBox.GroupStyle> 
</ListBox> 

在這個例子中,CityName將是MyItems用來做分揀

+0

嗯......我的答案確實討論了SortDescriptions。 – 2011-04-07 18:34:03

+0

@Aaron - 當我第一次加載頁面時沒有。您已編輯包含。當然,在帖子的前幾分鐘內編輯並不會顯示爲編輯,所以我無法證明這一點。 – xdumaine 2011-04-07 18:35:30