2012-01-01 71 views
0

我有一個具有各種屬性的Car類。CollectionViewSource動態排序

我有一個靜態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()將包含屬性的名稱進行排序的。

所以我該如何擺脫屬性名稱前面的數據類型我知道我可以做各種雜亂的加載到另一個列表,然後一堆字符串處理尋找右邊的第一個空間,並在之前砍掉所有的東西。 但是一定有一個更簡單的方法。

有效什麼,我希望做的是讓對汽車類的不同屬性用戶排序(所以我需要的地方加載性能,並使它們可供用戶選擇,所以組合框)。我所要求的是,必須有一種簡單的方法來獲得沒有所有字符串操作代碼的屬性列表,並且希望沒有太多反射(除非我已經在不知道的情況下使用它),因爲它似乎是一個非常基本的要求。

在此先感謝您的幫助!

回答

1

這不是凌亂都:

 var properties = new List<string>(); 

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

非常感謝解決方案和快速響應。做得好。 – 2012-01-01 05:49:40