2013-09-23 5 views
2

Я пытаюсь создать DataGrid внутри WPF DataGrid's RowDetailsTemplate.WPF DataGrid внутри DataGrid.RowDetailsTemplate

У меня есть коллекция вакансий. Каждый Работа может иметь один или несколько сотрудников, возложенные на него:

public class Job : _Base 
{ 
    private string _JobName = string.Empty; 
    public string JobName 
    { 
     get { return _JobName; } 
     set 
     { 
      if (_JobName != value) 
      { 
       _JobName = value; 
       RaisePropertyChanged("JobName"); 
      } 
     } 
    } 

    private string _JobNumber = string.Empty; 
    public string JobNumber 
    { 
     get { return _JobNumber; } 
     set 
     { 
      if (_JobNumber != value) 
      { 
       _JobNumber = value; 
       RaisePropertyChanged("JobNumber"); 
      } 
     } 
    } 

    private ObservableCollection<Employee> _Employees; 
    public ObservableCollection<Employee> Employees 
    { 
     get { return _Employees; } 
     set 
     { 
      if (_Employees != value) 
      { 
       if (_Employees != value) 
       { 
        _Employees = value; 
        RaisePropertyChanged("Employees"); 
       } 
      } 
     } 
    } 

    public Job() 
    { 
     Employees = new ObservableCollection<Employee>(); 
    } 
} 

и

public class Employee : _Base 
{ 
    private string _EmployeeName = string.Empty; 
    public string EmployeeName 
    { 
     get { return _EmployeeName; } 
     set 
     { 
      if (_EmployeeName != value) 
      { 
       _EmployeeName = value; 
       RaisePropertyChanged("EmployeeName"); 
      } 
     } 
    } 

    private bool _IsChecked = false; 
    public bool IsChecked 
    { 
     get { return _IsChecked; } 
     set 
     { 
      if (_IsChecked != value) 
      { 
       _IsChecked = value; 
       RaisePropertyChanged("IsChecked"); 
      } 
     } 
    } 
}  

и мой XAML:

<DataGrid ItemsSource="{Binding Jobs}" 
      AutoGenerateColumns="False"> 

    <DataGrid.Columns> 
     <DataGridTextColumn Header="Job Name" Binding="{Binding JobName}" /> 
     <DataGridTextColumn Header="Job Number" Binding="{Binding JobNumber}" /> 
    </DataGrid.Columns> 

    <DataGrid.RowDetailsTemplate> 
     <DataTemplate> 
      <DataGrid ItemsSource="{Binding Employees}" 
         AutoGenerateColumns="False"> 
       <DataGridCheckBoxColumn Binding="{Binding IsChecked}"/> 
       <DataGridTextColumn Binding="{Binding EmployeeName}"/> 
      </DataGrid> 
     </DataTemplate> 
    </DataGrid.RowDetailsTemplate> 

</DataGrid> 

Когда я запускаю это и щелкнуть строку, я получаю:

Операция недействительна в то время как ItemsSource используется. Доступ и изменение элементов с помощью ItemsControl.ItemsSource вместо

Если я удалю определения столбцов внутренней сетки, это не ошибка. Но тогда он генерирует столбцы сам по себе. Мне нужно указать столбцы самостоятельно.

Что здесь не так?

Благодаря

ответ

15

Вы должны определить столбцы вашего внутреннего DataGrid в правильно

<DataGrid ItemsSource="{Binding Employees}" AutoGenerateColumns="False"> 
    <DataGridCheckBoxColumn Binding="{Binding IsChecked}"/> 
    <DataGridTextColumn Binding="{Binding EmployeeName}"/> 
</DataGrid> 

Включите это

<DataGrid ItemsSource="{Binding Employees}" AutoGenerateColumns="False"> 
    <DataGrid.Columns> 
     <DataGridCheckBoxColumn Binding="{Binding IsChecked}"/> 
     <DataGridTextColumn Binding="{Binding EmployeeName}"/> 
    </DataGrid.Columns> 
</DataGrid> 

По сути установка это путь вы пытается установить источник в xaml, а затем привязать его к другому источнику th грубая ItemsSource, откуда исходит ошибка.

+1

Это сделало. Спасибо!! – CoderForHire

+0

@kmarois, пожалуйста, отметьте ответ как принято. – Natxo

Смежные вопросы