Apply Custom Sorting Logic to a Collection
<Window
x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
Title="WPF" Height="300" Width="180">
<Window.Resources>
<local:SortableCountries x:Key="sortableCountries"/>
</Window.Resources>
<Grid>
<StackPanel>
<ItemsControl ItemsSource="{StaticResource sortableCountries}" />
<Button Click="SortButton_Click" Content="Sort" Margin="8" />
</StackPanel>
</Grid>
</Window>
//File:Window.xaml.cs
using System;
using System.Collections;
using System.Windows;
using System.Windows.Data;
using System.Collections.ObjectModel;
namespace WpfApplication1
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
private void SortButton_Click(object sender, RoutedEventArgs args)
{
SortableCountries sortableCountries = (SortableCountries)(this.Resources["sortableCountries"]);
ListCollectionView lcv = (ListCollectionView)CollectionViewSource.GetDefaultView(sortableCountries);
lcv.CustomSort = new SortCountries();
}
}
public class SortCountries : IComparer
{
public int Compare(object x, object y)
{
string stringX = x.ToString();
string stringY = y.ToString();
return stringX.CompareTo(stringY);
}
}
public class SortableCountries : ObservableCollection<string>
{
public SortableCountries()
{
this.Add("C");
this.Add("B");
this.Add("A");
}
}
}
Related examples in the same category