CollectionViewSource动态排序

时间:2012-01-01 04:04:32

标签: c# xaml data-binding collectionviewsource

我有一个具有各种属性的Car类。

我有一个静态的汽车收集类,为简单起见,我已经定义了一系列汽车物品,我可以通过对象数据提供商在XAML中提供这些物品。

我有一个在XAML中定义的集合视图源,它可以成功地绑定到我的ObjectDataProvider。

我有一个显示该集合的列表框。

我按照所有标准教程中的建议将这种排序添加到CVS中,并且一切正常。

我的问题: 假设我想要对不同的字段进行排序。当然,有一种方法可以改变这一点,而无需将代码提供给客户。所以我实现了一个组合框。

我使用以下代码将Car类中的属性列表加载到组合框中,但我不只是获取属性列表。我也得到他们的数据类型。我不想要这个。

Car xyz=new Car(); //Make a temp Car Object so we can get a list of properties.
//Assign this to the combobox for listing.
cbxSortPrimary.ItemsSource = xyz.GetType().GetProperties();

结果(组合框中显示的内容):

System.String Model
Double Price
Int32 NoOfPrevOwners
DataType PropertyName
ect... ect...
ect... ect...
ect... ect...

我的目标是将属性名称加载到组合框中。然后使用选定的属性名称构建一行代码,如:

myListBox.Items.SortDescriptions.Add(new SortDescription(ComboBox.SelectedItem.ToString(), ListSortDirection.Descending));

ComboBox.SelectedItem.ToString()将包含要排序的属性的名称。

所以如何摆脱属性名称前面的数据类型我知道我可以把各种乱码加载到另一个列表中,然后是一堆字符串处理从右边查找第一个空格并在那之前砍掉所有内容但肯定必须有一种更简单的方法。

实际上我要做的是让用户对Car类的不同属性进行排序(所以我需要在某处加载属性并让它们可供用户选择,因此组合框)。我要问的是,必须有一个简单的方法来获取没有所有字符串操作代码的属性列表,并希望没有太多的反射(除非我已经在不知道的情况下使用它),因为它似乎是一个非常基本的要求。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

它根本不乱:

        var properties = new List<string>();

        foreach (var info in typeof(Car).GetProperties())
        {
            properties.Add(info.Name);
        }
        cbxSortPrimary.ItemsSource = properties;