Mega Code Archive

 
Categories / C# / WPF
 

Apply Custom Grouping 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: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));         }     } }