2013-03-24 83 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排序。