CollectionViewSource Сортировка динамически - PullRequest
0 голосов
/ 01 января 2012

У меня есть класс автомобилей с различными свойствами.

У меня есть статический класс коллекции 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 (поэтому мне нужно где-то загрузить свойства и сделать их доступными для выбора пользователем, отсюда и поле со списком). Я спрашиваю, что должен быть простой способ получить список свойств без всего кода манипуляции со строками и, надеюсь, без особого размышления (если я уже не использую его, не зная), поскольку это кажется очень основным требованием.

Заранее спасибо за любую помощь!

1 Ответ

1 голос
/ 01 января 2012

Это совсем не грязно:

        var properties = new List<string>();

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