1

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

我有一个静态 Cars 集合类,为简单起见,我在其中定义了一堆汽车项目,我可以通过对象数据提供程序在 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 类的不同属性进行排序(所以我需要在某处加载属性并使它们可供用户选择,因此是组合框)。我要问的是,必须有一种简单的方法来获取属性列表,而无需所有字符串操作代码,并且希望没有太多反射(除非我已经在不知道的情况下使用它),因为这似乎是一个非常基本的要求。

提前感谢您的帮助!

4

1 回答 1

2

它一点也不乱:

        var properties = new List<string>();

        foreach (var info in typeof(Car).GetProperties())
        {
            properties.Add(info.Name);
        }
        cbxSortPrimary.ItemsSource = properties;
于 2012-01-01T05:13:52.960 回答