2012-02-02 2 views
1

선택한 TreeView 항목 (실제로는 해당 데이터 소스)을 DataGrid에 바인딩해야합니다.DataSource를 통해 Treeview의 SelectedItem을 DataGrid에 바인딩하는 방법

F.ex. 나는 영수증 목록을 가지고 있으며, 영수증 아래에 영수증 목록이 있습니다. 트리 뷰에서 영수증을 선택하면 해당 항목을 DataGrid에 바인딩하고 싶습니다.

DataGrid 영수증 항목에서 값은 실제 데이터 소스에 바인딩되어야합니다.

어떻게 하시겠습니까? 트리에서 선택한 영수증로 DataGrids를 '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

이 예 (DataGrid에 따라 SvenG의 작은 도움으로) 베어 본질적으로 모든 작업을 수행합니다.

Window.xaml : MainWindow를 뒤에

<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; } 
    } 
} 
관련 문제