<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="294" Width="160"> <Window.Resources> <WpfApplication1:Countries x:Key="countries"/> <CollectionViewSource x:Key="cvs" Source="{Binding Source={StaticResource countries}}"> <CollectionViewSource.GroupDescriptions> <PropertyGroupDescription PropertyName="Continent"/> </CollectionViewSource.GroupDescriptions> </CollectionViewSource> <DataTemplate x:Key="groupingHeaderTemplate"> <Label VerticalAlignment="Center" Content="{Binding}" ></Label> </DataTemplate> </Window.Resources> <Grid> <ItemsControl ItemsSource="{Binding Source={StaticResource cvs}}" DisplayMemberPath="Name"> <ItemsControl.GroupStyle> <GroupStyle HeaderTemplate= "{StaticResource groupingHeaderTemplate}" /> </ItemsControl.GroupStyle> </ItemsControl> </Grid> </Window> //File:Window.xaml.cs using System.Collections.ObjectModel; namespace WpfApplication1 { 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)); } } }