データテンプレートはデータ(このエントリではPerson)を受け取り、表示ツリーを構築します。
ソースコード
App.xaml
<Application x:Class="WpfApplication6.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="WpfApplication6.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:l="clr-namespace:WpfApplication6" Title="MainWindow" Height="350" Width="525"> <Window.Resources> <l:TextToPersonConverter x:Key="personConverter" /> </Window.Resources> <StackPanel> <TextBox x:Name="textBox1" /> <ContentControl Margin="5"> <ContentControl.Content> <Binding ElementName="textBox1" Path="Text" Converter="{StaticResource personConverter}"> </Binding> </ContentControl.Content> <!-- データテンプレートをContentControlに関連付ける --> <ContentControl.ContentTemplate> <DataTemplate DataType="{x:Type l:Person}"> <StackPanel Orientation="Horizontal"> <TextBlock Text="名前:" /> <TextBlock Text="{Binding Path=Name}" /> </StackPanel> </DataTemplate> </ContentControl.ContentTemplate> </ContentControl> </StackPanel> </Window>
Person.cs
namespace WpfApplication6 { class Person { public string Name { get; set; } } }
TextToPersonConverter.cs
using System; using System.Globalization; using System.Windows.Data; namespace WpfApplication6 { class TextToPersonConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { Person p = new Person() { Name = (string) value }; return p; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } }
参考
IValueConverter インターフェイス (System.Windows.Data)
カスタム ロジックをバインディングに適用する方法を提供します。