2013-05-18 3 views
0

У меня есть простой Datagrid со связыванием, и этот работает правильно и внутри RowDetailsRemplate другой Datagrid, но в этом случае привязка не работает. Можете ли вы дать мне руку с этим разобраться?Databinding in RowDetailsTemplate не работает

XAML:

<DataGrid Name="datagrid" Margin="5,0,5,0" GridLinesVisibility="None" CanUserAddRows="False" ItemsSource="{Binding nowy}" > 
      <DataGrid.Columns> 
       <DataGridTemplateColumn> 
        <DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <Expander Name="expander" IsExpanded="False" Collapsed="sw" Expanded="pos"/> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellTemplate> 
       </DataGridTemplateColumn> 
      </DataGrid.Columns> 
      <DataGrid.RowDetailsTemplate> 
       <DataTemplate> 
        <StackPanel> 
         <DataGrid Name="wz" ItemsSource="{Binding flight_list}"/> 
        </StackPanel> 
       </DataTemplate> 
      </DataGrid.RowDetailsTemplate> 
     </DataGrid> 

C#:

public ObservableCollection<flight> flight_list { get; set; } 
    public ObservableCollection<subject> nowy { get; set; } 
nowy = new ObservableCollection<subject>() { 
      {new subject(){ Przedmiot = "J.angielski", Nauczyciel = "B.A.Krawczyk", Sala = "120", Poziom = "Średnio-zaawansowany", Status = "Uczeń"}}, 
      { new subject(){Przedmiot = "polski", Nauczyciel = "zły", Sala = "130", Poziom = "podstawowy", Status = "gey"}} 
     }; 
flight_list = new ObservableCollection<flight>(){new flight(){From = "Warsaw", To = "Florida", schedule = new List<string>(){"12-02-2013", "12-03-2012", "31-2"}}}; 
DataContext = this; 

ответ

0

Во-первых, я не вижу связи между flight и subject. Во-вторых, вы привязываете данные строки DataGrid элементов к flight, которые не являются списком, а типом, в соответствии с вашим кодом. В любом случае, если вы хотите связать его с flight_list, если вы не укажете его как источник, а не путь, то он будет искать flight в контексте subject типа, который не может выставлять свойство полета, насколько я могу видеть. Кроме того, вам не нужно использовать ItemContainerTemplate, стандартный DataTemplate будет делать, так как вы используете DataGrid которое ItemsControl

+0

Спасибо за ответ, я исправил незначительные ошибки, которые обнаружились во время копирования, но я до сих пор не знаю, как указать второй сетку для привязки к flight_list, поскольку, насколько я предполагаю, она все еще связывается с объектом. ? – Maximus

+0

Если 'flight_list' действительно не связан с' subject', тогда, как я сказал, вам нужно изменить контекст привязки и указать его как 'Source' или' RelativeSource' 'Binding' [MSDN] (http: // msdn .microsoft.com/EN-US/библиотека/system.windows.data.binding.source.aspx). Когда вы пишете 'ItemsSource =" {Binding flight_list} ", это означает' ItemsSource = "{Binding Path = flight_list}" '(в текущем контексте), и вам нужно' ItemsSource = "{Binding Source = ...}" ', но это зависит от наличия 'flight_list' – dkozl

+0

Я заменил внутри Datagrid на <Содержание ярлыка = {Binding} />, и он отображает имя объекта класса, поэтому моя презумпция была правильной. Тем не менее, все еще не работает, возможно, напишите мне, как это должно быть. – Maximus

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