データテンプレートはデータ(このエントリでは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; } } }