■ TreeView 엘리먼트의 ItemsSource 속성을 사용해 데이터를 바인딩하는 방법을 보여준다.
※ 비주얼 스튜디오에서 TestProject(Unpackaged) 모드로 빌드한다.
※ TestProject.csproj 프로젝트 파일에서 WindowsPackageType 태그를 None으로 추가했다.
▶ Item.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 |
using System.Collections.ObjectModel; namespace TestProject; /// <summary> /// 항목 /// </summary> public class Item { //////////////////////////////////////////////////////////////////////////////////////////////////// Property ////////////////////////////////////////////////////////////////////////////////////////// Public #region 항목명 - Name /// <summary> /// 항목명 /// </summary> public string Name { get; set; } #endregion #region 자식 항목 컬렉션 - ChildItemCollection /// <summary> /// 자식 항목 컬렉션 /// </summary> public ObservableCollection<Item> ChildItemCollection { get; set; } = new ObservableCollection<Item>(); #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Public #region 문자열 구하기 - ToString() /// <summary> /// 문자열 구하기 /// </summary> /// <returns>문자열</returns> public override string ToString() { return Name; } #endregion } |
▶ MainPage.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 |
<?xml version="1.0" encoding="utf-8"?> <Page x:Class="TestProject.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:TestProject" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" FontFamily="나눔고딕코딩" FontSize="16"> <SplitView HorizontalAlignment="Center" VerticalAlignment="Center" DisplayMode="Inline" OpenPaneLength="300" IsPaneOpen="True"> <SplitView.Pane> <TreeView Name="treeView" SelectionMode="Multiple" ItemsSource="{x:Bind ItemCollection}"> <TreeView.ItemTemplate> <DataTemplate x:DataType="local:Item"> <TreeViewItem ItemsSource="{x:Bind ChildItemCollection}" Content="{x:Bind Name}" /> </DataTemplate> </TreeView.ItemTemplate> </TreeView> </SplitView.Pane> <StackPanel Margin="10" Spacing="10"> <Button Name="selectAllButton" Content="Select all" /> <Button Name="createOrderButton" Content="Create order" /> <TextBlock Style="{StaticResource CaptionTextBlockStyle}" Text="Your flavor selections : " /> <TextBlock Name="flavorListTextBlock" TextWrapping="WrapWholeWords" /> <TextBlock Style="{StaticResource CaptionTextBlockStyle}" Text="Your topping selections : " /> <TextBlock Name="toppingListTextBlock" TextWrapping="WrapWholeWords" /> </StackPanel> </SplitView> </Page> |
▶ MainPage.xaml.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 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 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 |
using System.Collections.ObjectModel; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; namespace TestProject; /// <summary> /// 메인 페이지 /// </summary> public sealed partial class MainPage : Page { //////////////////////////////////////////////////////////////////////////////////////////////////// Field ////////////////////////////////////////////////////////////////////////////////////////// Private #region Field /// <summary> /// 항목 컬렉션 /// </summary> private ObservableCollection<Item> ItemCollection = new ObservableCollection<Item>(); #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor ////////////////////////////////////////////////////////////////////////////////////////// Public #region 생성자 - MainPage() /// <summary> /// 생성자 /// </summary> public MainPage() { InitializeComponent(); ItemCollection = GetItemCollection(); this.selectAllButton.Click += selectAllButton_Click; this.createOrderButton.Click += createOrderButton_Click; } #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Private //////////////////////////////////////////////////////////////////////////////// Event #region Select all 버튼 클릭시 처리하기 - selectAllButton_Click(sender, e) /// <summary> /// Select all 버튼 클릭시 처리하기 /// </summary> /// <param name="sender">이벤트 발생자</param> /// <param name="e">이벤트 인자</param> private void selectAllButton_Click(object sender, RoutedEventArgs e) { if(this.treeView.SelectionMode == TreeViewSelectionMode.Multiple) { this.treeView.SelectAll(); } } #endregion #region Create order 버튼 클릭시 처리하기 - createOrderButton_Click(sender, e) /// <summary> /// Create order 버튼 클릭시 처리하기 /// </summary> /// <param name="sender">이벤트 발생자</param> /// <param name="e">이벤트 인자</param> private void createOrderButton_Click(object sender, RoutedEventArgs e) { this.flavorListTextBlock.Text = string.Empty; this.toppingListTextBlock.Text = string.Empty; foreach(TreeViewNode treeViewNode in this.treeView.SelectedNodes) { if(treeViewNode.Parent == null) { continue; } if(treeViewNode.Parent.Content?.ToString() == "Flavors") { this.flavorListTextBlock.Text += treeViewNode.Content + "; "; } else if(treeViewNode.HasChildren == false) { this.toppingListTextBlock.Text += treeViewNode.Content + "; "; } } } #endregion //////////////////////////////////////////////////////////////////////////////// Function #region 항목 컬렉션 구하기 - GetItemCollection() /// <summary> /// 항목 컬렉션 구하기 /// </summary> /// <returns>항목 컬렉션</returns> private ObservableCollection<Item> GetItemCollection() { ObservableCollection<Item> collection = new ObservableCollection<Item>(); Item item1 = new Item() { Name = "Flavors", ChildItemCollection = { new Item() { Name = "Vanilla" }, new Item() { Name = "Strawberry" }, new Item() { Name = "Chocolate" } } }; Item item2 = new Item() { Name = "Toppings", ChildItemCollection = { new Item() { Name = "Candy", ChildItemCollection = { new Item() { Name = "Chocolate" }, new Item() { Name = "Mint" }, new Item() { Name = "Sprinkles" } } }, new Item() { Name = "Fruits", ChildItemCollection = { new Item() { Name = "Mango" }, new Item() { Name = "Peach" }, new Item() { Name = "Kiwi" } } }, new Item() { Name = "Berries", ChildItemCollection = { new Item() { Name = "Strawberry" }, new Item() { Name = "Blueberry" }, new Item() { Name = "Blackberry" } } } } }; collection.Add(item1); collection.Add(item2); return collection; } #endregion } |