この例では、(データグリッドに従ってSvenGの少しの助けを借りて)裸の本質的にはそれをすべて行います。
Window.xaml:メインウィンドウの後ろ
<Window x:Class="WpfSOTreeviewSelectedItem.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TreeView Name="tvReceipts" Grid.Column="0">
<TreeView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Name}"></TextBlock>
</DataTemplate>
</TreeView.ItemTemplate>
</TreeView>
<DataGrid AutoGenerateColumns="False" Grid.Column="1" ItemsSource="{Binding ElementName=tvReceipts, Path=SelectedItem.Items}">
<DataGrid.Columns>
<DataGridTextColumn Header="Ingredient" Binding="{Binding Name}" />
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
コード:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
List<Receipt> list = new List<Receipt>();
Receipt r;
r = new Receipt() { Name = "Pizza" };
list.Add(r);
ReceiptItem ri;
ri = new ReceiptItem() { Name = "Tomatoes" };
r.Items.Add(ri);
ri = new ReceiptItem() { Name = "Herbs" };
r.Items.Add(ri);
r = new Receipt() { Name = "Tortellini" };
list.Add(r);
ri = new ReceiptItem() { Name = "Flower" };
r.Items.Add(ri);
ri = new ReceiptItem() { Name = "Meat" };
r.Items.Add(ri);
r = new Receipt() { Name = "Tarte Tatin" };
list.Add(r);
ri = new ReceiptItem() { Name = "Apples" };
r.Items.Add(ri);
ri = new ReceiptItem() { Name = "Raisins" };
r.Items.Add(ri);
tvReceipts.ItemsSource = list;
}
}
public class Receipt
{
private String _name;
public String Name
{
get { return _name; }
set { _name = value; }
}
private List<ReceiptItem> _items = new List<ReceiptItem>();
public List<ReceiptItem> Items
{
get { return _items; }
set { _items = value; }
}
}
public class ReceiptItem
{
private String _name;
public String Name
{
get { return _name; }
set { _name = value; }
}
}