Mega Code Archive

 
Categories / C# / WPF
 

Use CollectionViewSource to sort and group data in XAML

<Window x:Class="WpfApplication1.Window1"   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"   xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"   xmlns:src="clr-namespace:WpfApplication1"   xmlns:dat="clr-namespace:System.Windows.Data;assembly=PresentationFramework"    Title="CollectionViewSourceSample">   <Window.Resources>     <src:Places x:Key="places"/>     <CollectionViewSource Source="{StaticResource places}" x:Key="cvs">       <CollectionViewSource.SortDescriptions>         <scm:SortDescription PropertyName="CityName"/>       </CollectionViewSource.SortDescriptions>       <CollectionViewSource.GroupDescriptions>         <dat:PropertyGroupDescription PropertyName="State"/>       </CollectionViewSource.GroupDescriptions>     </CollectionViewSource>   </Window.Resources>   <DockPanel>     <ListBox ItemsSource="{Binding Source={StaticResource cvs}}" DisplayMemberPath="CityName" Name="lb">       <ListBox.GroupStyle>         <x:Static Member="GroupStyle.Default"/>       </ListBox.GroupStyle>     </ListBox>   </DockPanel> </Window> //File:Window.xaml.cs using System.Windows; using System.Collections.ObjectModel; namespace WpfApplication1 {     public partial class Window1 : Window     {         public Window1()         {             InitializeComponent();         }     }     public class Place     {         private string name;         private string state;         public string CityName         {             get { return name; }             set { name = value; }         }         public string State         {             get { return state; }             set { state = value; }         }         public Place()         {             this.name = "";             this.state = "";         }         public Place(string name, string state)         {             this.name = name;             this.state = state;         }     }     public class Places : ObservableCollection<Place>     {         public Places()         {             Add(new Place("A", "WA"));             Add(new Place("B", "WA"));             Add(new Place("C", "WA"));         }     } }