Mega Code Archive

 
Categories / VB.Net / 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.vb Imports System Imports System.Globalization Imports System.Windows.Data Imports System.Collections.ObjectModel Namespace WpfApplication1   Public Class GroupByContinentConverter     Implements IValueConverter     Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IValueConverter.Convert       Dim country As Country = DirectCast(value, Country)       ' Decide which group the country belongs in       Select Case country.Continent         Case Continent.NorthAmerica           Return "Americas"         Case Else           Return "Others"       End Select     End Function     Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IValueConverter.ConvertBack       Throw New NotImplementedException()     End Function   End Class   Public Class Country     Private m_name As String     Private m_continent As Continent     Public Sub New(name As String, continent As Continent)       Me.m_name = name       Me.m_continent = continent     End Sub     Public Property Name() As String       Get         Return m_name       End Get       Set         m_name = value       End Set     End Property     Public Property Continent() As Continent       Get         Return m_continent       End Get       Set         m_continent = value       End Set     End Property   End Class   Public Enum Continent     Europe     NorthAmerica   End Enum   Public Class Countries     Inherits Collection(Of Country)     Public Sub New()       Me.Add(New Country("Great Britan", Continent.Europe))       Me.Add(New Country("USA", Continent.NorthAmerica))       Me.Add(New Country("Canada", Continent.NorthAmerica))     End Sub   End Class End Namespace