如何在WPF ListBox中排序?

时间:2013-03-24 15:09:48

标签: c# .net wpf sorting event-handling

C#4.0 WPF应用程序,请参阅下面的代码,在启动时显示:

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

点击带有btnSort_Click()点击事件处理程序的排序按钮后

abd:

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”而不是“内容”获得相同,如第二次截图,结果?

4 个答案:

答案 0 :(得分:22)

由于您要对字符串列表进行排序,请不要指明属性名称(SortDescription的第一个参数):

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

答案 1 :(得分:4)

对wpf组合框或列表框进行排序很容易 - 但请记住包含Imports System.ComponentModel

按字母顺序排序,只需

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

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

答案 2 :(得分:4)

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

确保每次都更新

答案 3 :(得分:3)

其他信息:

您排序的项目可以是任何DependencyProperty。因此,假设您有一个自定义类的ObservableCollection绑定到ListBox控件的ItemsSource。自定义类可以具有任意数量的依赖项属性,您可以使用这些属性进行排序。您只需将依赖项属性的名称(作为string)放入新的SortDescription参数中。

向控件添加多个SortDescription将执行多变量排序。

依赖项属性可以表示任何类型的变量,而不仅仅是字符串。我有一个示例,我首先按bool排序,然后按int排序,最后按DateTime排序。