0
我想在datagrid單元格中顯示集合的內容。有什麼特別之處在於,列標題必須與特定的集合項目綁定(即每個工作日一個)。單元格內容應該是相應集合中每個員工的文本框。 columnheaderpart工作正常。綁定datagridcell以顯示集合的內容
視圖模型的層次結構如下所示:
Planning holds a collection of Projects and a collection of Days(used to get the columnheader)
Project holds a collection of Days
Day holds a collection of Employees
但是,下面的代碼無法正常工作。從調試中我發現它是綁定的問題,因爲沒有訪問員工集合的權限。任何想法爲什麼這不起作用?
<DataGrid Grid.Row="0" Grid.Column="1" AutoGenerateColumns="False" ItemsSource="{Binding Planning.Projects}" ColumnHeaderHeight="50">
<DataGrid.Columns>
<DataGridTextColumn Width="200" Header="Project" Binding="{Binding Projectname}">
</DataGridTextColumn>
<DataGridTemplateColumn>
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<TextBlock DataContext="{Binding DataContext.Week.Days[0].Id, RelativeSource={RelativeSource AncestorType=DataGrid}}" HorizontalAlignment="Center">
<Run Text="{Binding Mode=OneWay, StringFormat=ddd}"/>
<LineBreak/>
<Run Text="{Binding Mode=OneWay, StringFormat=dd.MM.yyyy}"/>
</TextBlock>
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ItemsControl ItemsSource="{Binding DataContext.Planning.Projects.Days[0].Employees}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
OK,所以Cell DataTemplate的'DataContext'可能是'Project'的一個實例,因爲DataGrid的'ItemsSource'是一個名爲'Projects'的集合。 *通過*臨時確認*用
我的關注點是:DataContext.Planning.Projects.Days [0] .Employees。這條道路上有很多可能是由於對數據上下文如何工作的誤解而產生的,但也可能是視圖模型設計中一些非常規選擇的產物。 'Project'是否有'DataContext'屬性?我建議不要使用它作爲viewmodel屬性名稱。我不確定「Projects.Days」應該怎麼做;不是'項目'通用集合?我希望它是'ObservableCollection'。 –
你是對的:'