首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CollectionViewSource动态排序

CollectionViewSource动态排序
EN

Stack Overflow用户
提问于 2012-01-01 04:04:31
回答 1查看 800关注 0票数 1

我有一辆有各种属性的汽车。

我有一个静态Cars集合类,为了简单起见,我定义了一组可以通过对象数据提供程序在XAML中使用的car项。

我在XAML中定义了一个集合视图源代码,它成功地绑定到我的ObjectDataProvider上。

我有一个显示收藏的列表盒。

按照所有标准教程中的建议,我将排序添加到CVS中,并且所有操作都很好。

我的问题是:假设我想在另一个领域进行排序。当然,有一种方法可以改变这种情况,而不必将代码交给客户。所以我实现了一个组合框。

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

代码语言:javascript
复制
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();

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

代码语言:javascript
复制
System.String Model
Double Price
Int32 NoOfPrevOwners
DataType PropertyName
ect... ect...
ect... ect...
ect... ect...

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

代码语言:javascript
复制
myListBox.Items.SortDescriptions.Add(new SortDescription(ComboBox.SelectedItem.ToString(), ListSortDirection.Descending));

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

那么,,如何在属性名前面去掉数据类型。我知道我可以做各种杂乱无章的加载到另一个列表,然后一堆字符串处理从右边寻找第一个空格,并切分之前的一切。,但肯定有更简单的方法。

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

提前感谢您的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-01 05:13:52

一点也不乱:

代码语言:javascript
复制
        var properties = new List<string>();

        foreach (var info in typeof(Car).GetProperties())
        {
            properties.Add(info.Name);
        }
        cbxSortPrimary.ItemsSource = properties;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8691786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档