ソースコード
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:sx="clr-namespace:System.Xml;assembly=System.Xml" xmlns:l="clr-namespace:WpfApplication6" DataContext="{DynamicResource dataSource}" Title="MainWindow" Height="350" Width="525"> <Window.Resources> <XmlDataProvider x:Key="dataSource"> <x:XData> <Company xmlns=""> <SoumuBu Manager="山田太郎" /> <KeiriBu Manager="佐藤次郎" /> <JinjiBu Manager="渡辺三郎" /> </Company> </x:XData> </XmlDataProvider> <DataTemplate x:Key="SoumuBu" DataType="{x:Type sx:XmlElement}"> <StackPanel Orientation="Horizontal"> <Ellipse Margin="2" Width="14" Height="14" Fill="Red" /> <TextBlock Text="{Binding XPath=@Manager}" /> </StackPanel> </DataTemplate> <DataTemplate x:Key="KeiriBu" DataType="{x:Type sx:XmlElement}"> <StackPanel Orientation="Horizontal"> <Ellipse Margin="2" Width="14" Height="14" Fill="Silver" /> <TextBlock Text="{Binding XPath=@Manager}" /> </StackPanel> </DataTemplate> <DataTemplate x:Key="JinjiBu" DataType="{x:Type sx:XmlElement}"> <StackPanel Orientation="Horizontal"> <Ellipse Margin="2" Width="14" Height="14" Fill="Blue" /> <TextBlock Text="{Binding XPath=@Manager}" /> </StackPanel> </DataTemplate> </Window.Resources> <StackPanel> <TextBlock Text="部長の名前" /> <ListBox ItemsSource="{Binding XPath=/Company/*}"> <ListBox.ItemTemplateSelector> <l:SectionTemplateSelector /> </ListBox.ItemTemplateSelector> </ListBox> </StackPanel> </Window>
SectionTemplateSelector.cs
using System.Windows; using System.Windows.Controls; using System.Xml; namespace WpfApplication6 { class SectionTemplateSelector : DataTemplateSelector { public override DataTemplate SelectTemplate(object item, DependencyObject container) { XmlElement data = item as XmlElement; if (data != null) { return ((FrameworkElement)container).FindResource(data.LocalName) as DataTemplate; } return null; } } }
参考
DataTemplateSelector クラス (System.Windows.Controls)
データ オブジェクトおよびデータ バインドされた要素に基づいて DataTemplate を選択する方法を提供します。