ソースコード
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:m="clr-namespace:System.IO;assembly=mscorlib" xmlns:l="clr-namespace:WpfApplication6" Title="MainWindow" Height="350" Width="525"> <Window.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary> <l:ToDirectoryChildrenConveter x:Key="toDirectoryChildrenConveter" /> </ResourceDictionary> <ResourceDictionary> <HierarchicalDataTemplate DataType="{x:Type m:DirectoryInfo}" ItemsSource="{Binding Converter={StaticResource toDirectoryChildrenConveter}}"> <TextBlock Text="{Binding Path=Name}" /> </HierarchicalDataTemplate> </ResourceDictionary> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Window.Resources> <TreeView ItemsSource="{Binding}" /> </Window>
MainWindow.xaml.cs
using System.IO; using System.Windows; namespace HelloWorld { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); this.DataContext = new DirectoryInfo[] { new DirectoryInfo(@"c:\windows") }; } } }
ToDirectoryChildrenConveter.cs
using System; using System.Globalization; using System.IO; using System.Windows.Data; namespace WpfApplication6 { class ToDirectoryChildrenConveter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { try { if (value is DirectoryInfo) { return ((DirectoryInfo)value).GetDirectories(); } } catch { } return null; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } }
参考
HierarchicalDataTemplate クラス (System.Windows)
TreeViewItem や MenuItem などの HeaderedItemsControl をサポートする DataTemplate を表します。