2013-03-24 115 views
4

的C#4.0的WPF應用程序,請參見下面的代碼,顯示了在啓動時:如何在WPF列表框中排序?

Initial order of in <code>ListBox</code>

ABD後點擊按鈕與btnSort_Click()排序Click事件處理程序:

ListBox After Sorting

如何我可以按順序排列aaa,bbb,ccc嗎?

C#代碼:

public MainWindow() 
{ 
    InitializeComponent(); 

    listBox1.Items.Add("ccc"); 
    listBox1.Items.Add("aaa"); 
    listBox1.Items.Add("bbb"); 
} 
private void btnSort_Click(object sender, RoutedEventArgs e) 
{ 
    listBox1.Items.SortDescriptions.Add(
    new System.ComponentModel.SortDescription("Content", 
     System.ComponentModel.ListSortDirection.Ascending)); 
} 
private void listBox1_MouseDoubleClick(object sender, MouseButtonEventArgs e) 
{ 
    listBox1.Items.RemoveAt 
    (listBox1.Items.IndexOf(listBox1.SelectedItem)); 
} 

XAML:

<Window x:Class="WpfApp.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <ListBox Height="100" HorizontalAlignment="Left" Margin="8,43,0,0" Name="listBox1" VerticalAlignment="Top" Width="120" MouseDoubleClick="listBox1_MouseDoubleClick" /> 
     <Button Content="Sort" Height="23" HorizontalAlignment="Left" Margin="140,94,0,0" Name="btnSort" VerticalAlignment="Top" Width="75" Click="btnSort_Click" /> 
    </Grid> 
</Window> 

更新:
好吧,我只是跟着文章"Sorting a WPF ListBox Items"

那麼,究竟是爲了通過我我正在通過屬性「內容」進行排序,並且該屬性「內容」在哪裏,我想知道(三編輯將其更改爲任意「fff」,而不是「Content」得到相同的結果,如第2次截圖所示。

回答

19

既然你選字符串列表,並不表明屬性名(SortDescription的第一個參數):

listBox1.Items.SortDescriptions.Add(
      new System.ComponentModel.SortDescription("", 
      System.ComponentModel.ListSortDirection.Ascending)); 
+0

謝謝。你能在我的問題中看看我的更新嗎? – Fulproof 2013-03-24 15:36:10

+0

我不確定你到底在問什麼......將代碼改爲我的建議是否解決了這個問題? – Blachshma 2013-03-24 15:37:53

+0

它確實有效。我想了解什麼是SortDescription()方法的第一個參數,以及爲什麼它在提供任意'propertyName'後不會給出錯誤?爲什麼順序是根本改變的(根據哪個排序規則) ? – Fulproof 2013-03-24 15:46:49

4

很容易排序WPF組合框或列表框 - 但請記住,包括進口System.ComponentModel

排序按字母順序排列,只需

MylistBox.Items.SortDescriptions.Add(
    New SortDescription("", ListSortDirection.Ascending)) 

MyComboBox.Items.SortDescriptions.Add(
    New SortDescription("", ListSortDirection.Ascending)) 
2
YOULISTBOX.Items.SortDescriptions.Clear(); 
YOULISTBOX.Items.SortDescriptions.Add(new System.ComponentModel.SortDescription("NAME", System.ComponentModel.ListSortDirection.Ascending)); 

,以確保它更新每次

2

附加信息:

的項目,你與...分類可能是任何DependencyProperty。因此,可以說你有一個自定義類的ObservableCollection,它綁定到ListBox控件的ItemsSource。自定義類可以具有任意數量的依賴項屬性,並且可以將它們用於排序(s)。您只需在新的SortDescription參數中輸入依賴項屬性的名稱(作爲string)。

將多個SortDescription s添加到控件將執行多變量排序。

依賴屬性可以表示任何類型的變量,而不僅僅是字符串。我有一個例子,首先按bool排序,然後按int排序,最後按DateTime排序。