■ CollectionViewSource 엘리먼트의 SortDescriptions/GroupDescriptions 속성을 사용해 데이터를 정렬하고 그룹을 설정하는 방법을 보여준다.
▶ Place.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
namespace TestProject { /// <summary> /// 장소 /// </summary> public class Place { //////////////////////////////////////////////////////////////////////////////////////////////////// Property ////////////////////////////////////////////////////////////////////////////////////////// Public #region 도시명 - CityName /// <summary> /// 도시명 /// </summary> public string CityName { get; set; } #endregion #region 주 - State /// <summary> /// 주 /// </summary> public string State { get; set; } #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor ////////////////////////////////////////////////////////////////////////////////////////// Public #region 생성자 - Place() /// <summary> /// 생성자 /// </summary> public Place() { CityName = string.Empty; State = string.Empty; } #endregion #region 생성자 - Place(cityName, state) /// <summary> /// 생성자 /// </summary> /// <param name="cityName">도시명</param> /// <param name="state">주</param> public Place(string cityName, string state) { CityName = cityName; State = state; } #endregion } } |
▶ PlaceCollection.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
using System.Collections.ObjectModel; namespace TestProject { /// <summary> /// 장소 컬렉션 /// </summary> public class PlaceCollection : ObservableCollection<Place> { //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor ////////////////////////////////////////////////////////////////////////////////////////// Public #region 생성자 - PlaceCollection() /// <summary> /// 생성자 /// </summary> public PlaceCollection() { Add(new Place("Seattle" , "WA")); Add(new Place("Redmond" , "WA")); Add(new Place("Bellevue" , "WA")); Add(new Place("Kirkland" , "WA")); Add(new Place("Portland" , "OR")); Add(new Place("San Francisco", "CA")); Add(new Place("Los Angeles" , "CA")); Add(new Place("San Diego" , "CA")); Add(new Place("San Jose" , "CA")); Add(new Place("Santa Ana" , "CA")); Add(new Place("Bellingham" , "WA")); } #endregion } } |
▶ MainWindow.xaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
<Window x:Class="TestProject.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:TestProject" xmlns:componentModel="clr-namespace:System.ComponentModel;assembly=WindowsBase" Width="800" Height="600" Title="TestProject" FontFamily="나눔고딕코딩" FontSize="16"> <Window.Resources> <local:PlaceCollection x:Key="PlaceCollectionKey" /> <CollectionViewSource x:Key="PlaceCollectionViewSourceKey" Source="{StaticResource PlaceCollectionKey}"> <CollectionViewSource.SortDescriptions> <componentModel:SortDescription PropertyName="CityName" /> </CollectionViewSource.SortDescriptions> <CollectionViewSource.GroupDescriptions> <PropertyGroupDescription PropertyName="State" /> </CollectionViewSource.GroupDescriptions> </CollectionViewSource> <XmlDataProvider x:Key="XmlDataProviderKey" XPath="Tasks/Task"> <x:XData> <Tasks xmlns=""> <Task Name="Groceries" Priority="2" Type="Home"> <Description>Pick up Groceries and Detergent</Description> </Task> <Task Name="Laundry" Priority="2" Type="Home"> <Description>Do Laundry</Description> </Task> <Task Name="Email" Priority="1" Type="Work"> <Description>Email Clients</Description> </Task> <Task Name="Clean" Priority="3" Type="Work"> <Description>Clean my office</Description> </Task> <Task Name="Dinner" Priority="1" Type="Home"> <Description>Get ready for family reunion</Description> </Task> <Task Name="Proposals" Priority="2" Type="Work"> <Description>Review new budget proposals</Description> </Task> </Tasks> </x:XData> </XmlDataProvider> <CollectionViewSource x:Key="TaskCollectionViewSourceKey" Source="{StaticResource XmlDataProviderKey}"> <CollectionViewSource.SortDescriptions> <componentModel:SortDescription PropertyName="@Priority" /> </CollectionViewSource.SortDescriptions> <CollectionViewSource.GroupDescriptions> <PropertyGroupDescription PropertyName="@Priority" /> </CollectionViewSource.GroupDescriptions> </CollectionViewSource> </Window.Resources> <DockPanel Margin="10"> <ListBox Width="200" Padding="5" DisplayMemberPath="CityName" ItemsSource="{Binding Source={StaticResource PlaceCollectionViewSourceKey}}"> <ListBox.GroupStyle> <x:Static Member="GroupStyle.Default" /> </ListBox.GroupStyle> </ListBox> <ListBox Margin="10 0 0 0" Padding="5" ItemsSource="{Binding Source={StaticResource TaskCollectionViewSourceKey}}" /> </DockPanel> </Window> |