<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")); } } }