2012-02-02 10 views
1

選択したツリービュー項目(実際にはそのデータソース)をDataGridにバインドする必要があります。TreeViewのSelectedItemをDataSource経由でDatagridにバインドする方法

F.ex.私は領収書のリストを持っており、1つの領収書の下に領収書項目のリストがあります。ツリービューから領収書が選択されたときに、それらのアイテムをデータグリッドにバインドしたいと思います。

データグリッドの領収書アイテムは編集されるため、値は実際のデータソースにバインドする必要があります。

これを行う方法?ツリーで選択された領収書をごDataGridののItemsSourceにバインド

答えて

3

<TreeView x:Name="ReceiptsTree" ItemsSource="{Binding Receipts}"/> 


    <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding ElementName=ReceiptsTree, Path=SelectedItem.ReceiptItems}"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="Receipt Name" Binding="{Binding Name}" /> 
     .... 
    </DataGrid.Columns> 
    </DataGrid> 
1

この例では、(データグリッドに従って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; } 
    } 
} 
関連する問題