我想在datagrid单元格中显示集合的内容。特别之处在于,列标题绑定到特定的集合项(即每个工作日一个)。单元格内容应该是相应集合中每个员工的文本框。 columnheaderpart工作正常。
viewmodel的层次结构如下:
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
但是,以下代码无效。从调试开始,我认为这是绑定问题,因为无法访问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>
答案 0 :(得分:0)
单元格DataContext
的{{1}}可能是DataTemplate
的一个实例,因为Project
的{{1}}是一个名为ItemsSource
的集合}。
因此,在DataGrid
中,Projects
上的任何CellTemplate
都应引用Path
的属性,就像在Binding
列中一样:
Project
Projectname
是每列的<DataGridTextColumn
Width="200"
Header="Project"
Binding="{Binding Projectname}">
。上述Project
有效,因为DataContext
是Binding
的属性。
所以这应该有效:
Projectname
Project
有一个<ItemsConttrol
ItemsSource="{Binding Days[0].Employees}"
...
集合。您希望此项目的Project
中的第一项Days
集合。