How to sort in a WPF ListBox?

房东的猫 提交于 2019-12-07 06:38:23

问题


The C# 4.0 WPF application, see the code below, shows on startup:

abd after clicking the Sort button with btnSort_Click() click event handler:

How can I sort in order aaa, bbb, ccc?

C# code:

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>

Update:
Well, I simply followed the article "Sorting a WPF ListBox Items"

So, what is the order by which I am sorting by a property "Content" and where is that property "Content", I wonder (tried to change it to arbitrary "fff" instead of "Content" having gotten the same, as in 2nd screenshot, results?


回答1:


Since you're sorting a list of strings, don't indicate a property name (first parameter of SortDescription):

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



回答2:


It's easy to sort a wpf combobox or listbox - but remember to include Imports System.ComponentModel.

To sort in alphabetical order, simply

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

or

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



回答3:


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

to ensure it update every time




回答4:


Additional info:

The item that you sort with may be any DependencyProperty. So lets say that you have an ObservableCollection of a custom class that is bound to the ItemsSource of the ListBox control. The custom class can have any number of dependency properties, and you can use those for the sort(s). You just put the name of the dependency property (as a string) in the new SortDescription argument.

Adding multiple SortDescriptions to the control will do a multi-variable sort.

The dependency properties may represent any type of variable and not just strings. I have an example where I am sorting first by a bool, then by an int, and finally by DateTime.



来源:https://stackoverflow.com/questions/15600099/how-to-sort-in-a-wpf-listbox

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!