<Window x:Class="WpfApplication1.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:WpfApplication1="clr-namespace:WpfApplication1" Title="WPF" Height="300" Width="160"> <Window.Resources> <WpfApplication1:Countries x:Key="countries"/> <WpfApplication1:GroupByContinentConverter x:Key="GroupByContinentConverter"/> <CollectionViewSource x:Key="cvs" Source="{Binding Source={StaticResource countries}}"> <CollectionViewSource.GroupDescriptions> <PropertyGroupDescription Converter="{StaticResource GroupByContinentConverter}" /> </CollectionViewSource.GroupDescriptions> </CollectionViewSource> </Window.Resources> <Grid> <ItemsControl ItemsSource="{Binding Source={StaticResource cvs}}" DisplayMemberPath="Name" > <ItemsControl.GroupStyle> <x:Static Member="GroupStyle.Default"/> </ItemsControl.GroupStyle> </ItemsControl> </Grid> </Window> //File:Window.xaml.cs using System; using System.Globalization; using System.Windows.Data; using System.Collections.ObjectModel; namespace WpfApplication1 { public class GroupByContinentConverter : IValueConverter { public object Convert(object value,Type targetType,object parameter,CultureInfo culture) { Country country = (Country)value; // Decide which group the country belongs in switch (country.Continent) { case Continent.NorthAmerica: return "Americas"; default: return "Others"; } } public object ConvertBack(object value,Type targetType,object parameter,CultureInfo culture) { throw new NotImplementedException(); } } public class Country { private string name; private Continent continent; public Country(string name, Continent continent) { this.name = name; this.continent = continent; } public string Name { get { return name; } set { name = value; } } public Continent Continent { get { return continent; } set { continent = value; } } } public enum Continent { Europe, NorthAmerica, } public class Countries : Collection<Country> { public Countries() { this.Add(new Country("Great Britan", Continent.Europe)); this.Add(new Country("USA", Continent.NorthAmerica)); this.Add(new Country("Canada", Continent.NorthAmerica)); } } }