gpt4 book ai didi

wpf - 如何在 CellTemplate 中为 DataTemplate 设置特定的 Datacontext

转载 作者:行者123 更新时间:2023-12-04 09:43:28 25 4
gpt4 key购买 nike

目前我绑定(bind)到 List<T>所以我必须为每个列单独设置 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 (ObColl[Idx]) 在我的 DataGridTemplateColumn但我该怎么做?

编辑

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]}是问题部分,因为它不存在....

最佳答案

好的,这是我对您要求的理解...您有一个 MyRow具有两个属性的类; MyRowheaderMyCellList .您想显示 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>

如果我误解了您的要求,请告诉我。

更新>>>

所以我确实误解了你的要求。似乎您想要 MyCellList 中的一个值 DataGrid 的每一列而不是行中的集合.在这种情况下,我的回答是否定的,您无法设置 DataGrid.Columns使用 DataTemplate或任何其他 XAML 保存功能。 XAML 是一种冗长的语言……有几种方法可以更有效地编写它,但并不多。您经常会在 XAML 页面上发现重复的代码。

我能想到的唯一可以编写更少代码的方法是从代码动态生成列。您可以在 Dynamically add Columns to DataGrid in wpf 中找到一个基本示例。邮政。我不知道这会为你节省多少时间。

关于wpf - 如何在 CellTemplate 中为 DataTemplate 设置特定的 Datacontext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20093992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com