2016-05-29 2 views
0

Я создал DataGrid с DataGrid в RowDataTemplete.I необходимо связать его следующими способамиКак связать DataGrid в DataGrid.RowDetailTemplate

<DataGrid Name="dgUsers" AutoGenerateColumns="False" Background="#FFDED6D6"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Header="Name" Binding="{Binding Name}" IsReadOnly="True" Foreground="#FF9C2626" /> 
      <DataGridTextColumn Header="Birthday" Binding="{Binding Birthday}" IsReadOnly="True" /> 
     </DataGrid.Columns> 
     <DataGrid.RowDetailsTemplate> 
      <DataTemplate> 
       <DockPanel Background="GhostWhite"> 
        <Image DockPanel.Dock="Left" Source="{Binding ImageUrl}" Height="64" Margin="10" /> 
        <Grid Margin="0,10"> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="Auto" /> 
          <ColumnDefinition Width="*" /> 
         </Grid.ColumnDefinitions> 
         <Grid.RowDefinitions> 
          <RowDefinition Height="Auto" /> 
          <RowDefinition Height="Auto" /> 
          <RowDefinition Height="Auto" /> 
         </Grid.RowDefinitions> 


         <DataGrid ItemsSource="{Binding}" AutoGenerateColumns="False"> 
          <DataGrid.Columns> 
           <DataGridTextColumn Header="Item" Binding="{Binding Path=Items.item}" IsReadOnly="True" Foreground="#FF9C2626" /> 
           <DataGridTextColumn Header="Qty" Binding="{Binding Path=Items.qty}" IsReadOnly="True" /> 
          </DataGrid.Columns> 
         </DataGrid> 
        </Grid> 
       </DockPanel> 
      </DataTemplate> 
     </DataGrid.RowDetailsTemplate> 
    </DataGrid> 

код CS дается ниже

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 

     List<User> users = new List<User>(); 
     users.Add(new User() { Id = 1, Name = "John Doe", Birthday = new DateTime(1971, 7, 23), ImageUrl = "http://www.wpf-tutorial.com/images/misc/john_doe.jpg", Items = new Items() { item="Thenga",qty="2"} }); 
        users.Add(new User() { Id = 2, Name = "Jane Doe", Birthday = new DateTime(1974, 1, 17), Items = new Items() { item="Olakka",qty="5"} }); 
        users.Add(new User() { Id = 3, Name = "Sammy Doe", Birthday = new DateTime(1991, 9, 2), Items = new Items() { item = "Punnaak", qty = "3" } }); 

        dgUsers.ItemsSource = users; 
    } 
    public class User 
    { 
     public int Id { get; set; } 

     public string Name { get; set; } 

     public DateTime Birthday { get; set; } 

     public string ImageUrl { get; set; } 
     public Items Items { get; set; } 
    } 

    public class Items 
    { 
     public string item { get; set; } 
     public string qty { get; set; } 
    } 

} 

После Выполнение кода выше; RowDetailsTemplate не привязана к моим данным. Мне нужна ваша помощь для привязки DataGrid к DataGrid как к RowDetailsTemplate

+0

Если я понимаю, что вы хотите сделать, то ваш внутренние данные элементов сетки источник должен связываться с 'Items 'property:' ItemsSource = "{Binding Items}", но это не будет работать, поскольку «Элементы» не являются списком. Я думаю, что вам нужен список – dkozl

+0

Да ... Я уже делаю это с ItemsSource, но данные не привязываются к ListView –

+0

Что такое ListView? Здесь нет списка. Там 'DataGrid' с внутренним' DataGrid' – dkozl

ответ

1

Если я понимаю вашу проблему, вы хотите связать внутреннее свойство DataGrid - Items. Если это так, то первая проблема здесь вам нужно привязать ItemsSource к Items свойство вместо целого User, а затем связать столбцы внутренней DataGrid свойствам Items

<DataGrid.RowDetailsTemplate> 
    <DataTemplate> 
     <!-- .... --> 
     <DataGrid ItemsSource="{Binding Items}" ...> 
      <DataGrid.Columns> 
       <DataGridTextColumn Header="Item" Binding="{Binding Path=item}" IsReadOnly="True" Foreground="#FF9C2626" /> 
       <DataGridTextColumn Header="Qty" Binding="{Binding Path=qty}" IsReadOnly="True" /> 
      </DataGrid.Columns> 
     </DataGrid> 
     <!-- .... --> 
    </DataTemplate> 
</DataGrid.RowDetailsTemplate> 

Вторая проблема заключается в том, что Users является один элемент, не список. Если вы хотите связать что-то ItemsSource имущества должно быть IEnumerable так в вашей модели представления преобразовать его в список

public class User 
{ 
    .... 

    public List<Items> Items { get; set; } 
} 
Смежные вопросы