Visual Studio/WPF > TreeView 내의 두 속성(예: OS 및 codename)의 Binding 표시 예제 > MultiBinding StringFormat={}{0} {1}

운영 환경
Windows 7 Pro (32bit)
Microsoft Visual Studio 2017 Community

h tp : /// s ぇ l. ldb㎉g. jp / archi s / 52334146. HTML
를 바탕으로 학습 중.

이하의 변경을 해 보았다.
  • 자작 클래스의 Name 속성 외에 CodeName 속성 추가
  • 두 속성을 함께 TreeView에서 표시

  • 참고 : h tps : // s t c ゔ ぇ rf ぉ w. 코 m / 쿠에 s 치온 s / 23225751 / wpf - 병 ぢ ぢ ー ー ぉ ー p 로페 치에 s
    adPartage 님의 답변을 참고했습니다.

    MainWindow.xaml.cs
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    //
    using System.Collections.ObjectModel;
    
    namespace _170608_t1820_treeview
    {
        /// <summary>
        /// MainWindow.xaml の相互作用ロジック
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }
        }
        public class Category : ObservableCollection<Category>
        {
            public Category()
            {
            }
            public Category(string name, String codename)
            {
                Name = name;
                CodeName = codename;
            }
            public string Name { get; set; }
            public string CodeName { get; set; }
            public Category Children { get; set; }
        }
        public class OSTypes
        {
            public Category Categories { get; set; }
            public OSTypes()
            {
                Categories = new Category()
                {
                    new Category("OS", "")
                    {
                        Children = new Category
                        {
                            new Category("Windows", "")
                            {
                                Children = new Category
                                {
                                    new Category("Windows 10", "Threshold"),
                                    new Category("Windows 8.1", "Blue"),
                                }
                            },
                            new Category("Mac OS X", "")
                            {
                                Children = new Category
                                {
                                    new Category("Mac OS X 10.11", "El Capitan")
                                }
                            }
                        }
                    }
                };
            }
        }
    
    }
    

    MainWindow.xaml
    <Window x:Class="_170608_t1820_treeview.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:_170608_t1820_treeview"
            mc:Ignorable="d"
            Title="MainWindow" Height="350" Width="525">
        <Window.Resources>
            <local:OSTypes x:Key="keyOSTypes"/>
            <HierarchicalDataTemplate x:Key="keyTreeViewTemplate"
                                      ItemsSource="{Binding Path=Children}">
                <TextBlock>
                    <TextBlock.Text>
                        <MultiBinding StringFormat="{}{0}({1})">
                            <Binding Path="Name"/>
                            <Binding Path="CodeName"/>
                        </MultiBinding>
                    </TextBlock.Text>
                </TextBlock>
            </HierarchicalDataTemplate>
        </Window.Resources>
        <Window.DataContext>
            <Binding Mode="OneWay" Source="{StaticResource keyOSTypes}"/>
        </Window.DataContext>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition/>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>
            <TreeView ItemsSource="{Binding Categories}"
                      ItemTemplate="{StaticResource keyTreeViewTemplate}"/>
        </Grid>
    </Window>
    



    snippet


            <HierarchicalDataTemplate x:Key="keyTreeViewTemplate"
                                      ItemsSource="{Binding Path=Children}">
                <TextBlock>
                    <TextBlock.Text>
                        <MultiBinding StringFormat="{}{0}({1})">
                            <Binding Path="Name"/>
                            <Binding Path="CodeName"/>
                        </MultiBinding>
                    </TextBlock.Text>
                </TextBlock>
            </HierarchicalDataTemplate>
    

    keyTreeViewTemplate의 정의에서 단순히 TextBlock을 2개(Name, CodeName) 늘어놓으면 에러가 나왔다.

    'VisualTree' 속성이 여러 번 설정되었습니다.
    'VisualTree' 속성은 한 번만 설정할 수 있습니다.

    MultiBinding이라는 것이 있다는 것을 알고 사용하면 잘 됐다.

    좋은 웹페이지 즐겨찾기