Available for: Windows 8.1 | Windows Phone 8.1

Sorting

RadListView provides you with the functionality to programmatically sort its data. This can be achieved through adding SortDescriptors to its RadListView.SortDescriptors collection.

There are two type of descriptors:

  • PropertySortDescriptor : You can sort the data by a property value from the class that defines your items. This descriptor exposes the following properties:

    • PropertyName: Gets or sets the string name of the property that is used to retrieve the key to sort by.
    • SortOrder: Changes the sort order to Ascending or Descending.
    • Comparer: Gets or sets a custom IComparer instance. If this property is null, the default comparer will be used.
  • DelegateSortDescriptor : This descriptor enables you to sort by a custom key(e.g. some complex expression combining two or more properties) instead of being limited by the value of a single property of your item. This descriptor exposes the following properties:

    • KeyLookup: Gets or sets the IKeyLookup instance used to retrieve the sort key for each data item.
    • SortOrder: Changes the sort order to Ascending or Descending.
    • Comparer: Gets or sets a custom IComparer instance. If this property is null, the default comparer will be used.

Example

    <dataControls:RadListView ItemsSource="{Binding}">
        <dataControls:RadListView.Resources>
            <local:Key x:Key="key" />
        </dataControls:RadListView.Resources>
        <dataControls:RadListView.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Name}" />
            </DataTemplate>
        </dataControls:RadListView.ItemTemplate>
        <dataControls:RadListView.SortDescriptors>
            <dataCore:DelegateSortDescriptor SortOrder="Descending" KeyLookup="{StaticResource key}" />
        </dataControls:RadListView.SortDescriptors>
    </dataControls:RadListView>

    List<Item> list = new List<Item>();
    for (int i = 0; i < 10; i++)
    {
        list.Add(new Item { Id = i, Name = "Mr." + i });
    }
    this.DataContext = list;


    public class Item
    {
        public string Name { get; set; }
        public double Id { get; set; }
    }

    public class Key : IKeyLookup
    {
        public object GetKey(object instance)
        {
            return (instance as Item).Id % 2;
        }
    }