2013-03-24 3 views
4

C# 4.0 WPF аппликация см код ниже, показывает при запуске:Как сортировать в WPF ListBox?

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

абд после нажатия Сортировка кнопка с btnSort_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> 

Update:
Ну, я просто следовал статью "Sorting a WPF ListBox Items"

Итак, что такое порядок, по которому я am сортировка по свойству «Контент» и где это свойство «Контент», интересно (три ed, чтобы изменить его на произвольный «fff» вместо «Content», получив то же самое, что и на втором снимке экрана?

ответ

19

Поскольку вы сортировки списка строк, не указывают на имя свойства (первый параметр SortDescription):

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

Спасибо. Не могли бы вы посмотреть мое обновление в моем вопросе? – Fulproof

+0

Я не уверен, что именно вы сейчас спрашиваете ... Изменил ли код код на мое предложение исправить эту проблему? – Blachshma

+0

Это действительно сработало.Я хотел бы понять, что является первым аргументом метода SortDescription() и почему он не дает ошибку после предоставления произвольного 'propertyName' +, почему вообще изменяется порядок (и в соответствии с правилами сортировки) ? – Fulproof

4

Это легко сортировать МОФ выпадающий или ListBox - но не забудьте включить импорт 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 пользовательского класса, связанного с ItemsSource элемента управления ListBox. Пользовательский класс может иметь любое количество свойств зависимостей, и вы можете использовать их для сортировки. Вы просто положили имя свойства зависимостей (как string) в новый аргумент SortDescription.

Добавление нескольких элементов управления SortDescription s будет выполнять сортировку с несколькими переменными.

Свойства зависимостей могут представлять любой тип переменной, а не только строки. У меня есть пример, где я сортирую сначала bool, затем int и, наконец, DateTime.