読者です 読者をやめる 読者になる 読者になる

プログラマーな日々

プログラマーをやっています。好きなツール:WorkFlowy、好きな言語:C#、好きなサービス:Backlog、好きなAWS:AWS Lambda。

データテンプレートを使用する

データテンプレートはデータ(このエントリではHuman)を受け取り、表示ツリーを構築します。

アプリ実行

起動


入力


ソースコード

App.xaml
<Application x:Class="HelloWorld.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="MainWindow.xaml">
</Application>
MainWindow.xaml
<Window x:Class="HelloWorld.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="150" Width="300">
    <StackPanel>
        <TextBox x:Name="textBox1" />
        <ContentControl Margin="5">
            <ContentControl.Content>
                <Binding
                    ElementName="textBox1"
                    Path="Text">
                    <Binding.Converter>
                        <l:HumanConverter xmlns:l="clr-namespace:HelloWorld" />
                    </Binding.Converter>
                </Binding>
            </ContentControl.Content>
            <!-- データテンプレートをContentControlに関連付ける -->
            <ContentControl.ContentTemplate>
                <DataTemplate
                    xmlns:l="clr-namespace:HelloWorld"
                    DataType="{x:Type l:Human}">
                    
                    <Border
                        Margin="5" 
                        Padding="5" 
                        BorderBrush="Black"
                        BorderThickness="3"
                        CornerRadius="5">
                    <TextBlock Text="{Binding Path=Name}" />
                    </Border>
                </DataTemplate>
            </ContentControl.ContentTemplate>
        </ContentControl>
    </StackPanel>
</Window>
Human.cs
namespace HelloWorld {
    public class Human {
        public string Name { get; set; }
    }
}
HumanConverter.cs
using System;
using System.Globalization;
using System.Windows.Data;

namespace HelloWorld {
    public class HumanConverter : IValueConverter {
        public object Convert(
            object value,
            Type tartetType,
            object parameter,
            CultureInfo culture) {
            Human h = new Human();
            h.Name = (string) value;
            return h;
        }

        public object ConvertBack(
            object value,
            Type tartetType,
            object parameter,
            CultureInfo culture) {
            return ((Human) value).Name;
        }
    }
}