目前我绑定到List<T>
所以我必须将特定的foreach列作为单独的DataTemplate
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock TextAlignment="Center"
Text="{Binding ObColl[1].Std, UpdateSourceTrigger=PropertyChanged}"
Background="{Binding ObColl[1].DienstColor, TargetNullValue=Transparent,FallbackValue=Transparent}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
但我想要的是创建DataTemplate
一次作为资源
<DataGrid.Resources>
<DataTemplate x:Name="MyCellTemplate">
<TextBlock TextAlignment="Center"
Text="{Binding Std, UpdateSourceTrigger=PropertyChanged}"
Background="{Binding DienstColor, TargetNullValue=Transparent,FallbackValue=Transparent}" />
</DataTemplate>
</DataGrid.Resources>
并像
一样使用它<DataGridTemplateColumn CellTemplate="{StaticResource MyCellTemplate} ??{Binding ObColl[1]}??"/>
但要这样做,我需要在DataContext
中具体说明DataGridTemplateColumn
(ObColl [Idx])
但我该怎么做?
xaml应如下所示:
<DataGrid Name="dataGrid1"
ItemsSource="{Binding Itemlist, UpdateSourceTrigger=PropertyChanged}">
<DataGrid.Resources>
<DataTemplate x:Key="MyCellTemplate">
<TextBlock TextAlignment="Center"
Text="{Binding Std, UpdateSourceTrigger=PropertyChanged}"
Background="{Binding DienstColor, TargetNullValue=Transparent, FallbackValue=Transparent}" />
</DataTemplate>
</DataGrid.Resources>
<DataGrid.Columns>
<!-- Column 1 -->
<DataGridTemplateColumn CellTemplate="{StaticResource MyCellTemplate}"
DataContext={Binding ObColl[0]}/>
<!-- Column Header 2 -->
<DataGridTemplateColumn CellTemplate="{StaticResource MyCellTemplate}"
DataContext={Binding ObColl[1]}/>
</DataGrid.Columns>
</DataGrid>
DataContext={Binding ObColl[1]}
是问题部分,因为它不存在....
答案 0 :(得分:1)
好的,这是我对你的要求的理解......你有一个MyRow
类有两个属性; MyRowheader
和MyCellList
。您希望在MyRowheader
的每一行的MyCellList
集合中显示DataGrid
值和一个值。我就是这样做的:
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding YourCollection}">
<DataGrid.Columns>
<DataGridTextColumn Header="Header" Binding="{Binding MyRowheader,
UpdateSourceTrigger=PropertyChanged}" />
<DataGridTemplateColumn Header="Cell list">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding MyCellList[1].Std, UpdateSourceTrigger=
PropertyChanged}" Background="{Binding MyCellListl[1].DienstColor, TargetNullValue=
Transparent, FallbackValue=Transparent}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
如果我误解了你的要求,请告诉我。
更新&gt;&gt;&gt;
所以我确实误解了你的要求。您似乎想要MyCellList
的每个列中的DataGrid
集合中的一个值,而不是DataGrid.Columns
的行。在这种情况下,我的回答是否定的,您无法使用DataTemplate
或任何其他XAML保存功能设置{{1}}。 XAML是一种冗长的语言......有一些方法可以更有效地编写它,但不是很多。您经常会在XAML页面上找到重复的代码。
我能想到的唯一可以编写更少代码的方法就是从代码中动态生成列。您可以在Dynamically add Columns to DataGrid in wpf帖子中找到相关的基本示例。我不知道有多少时间可以拯救你。