WPF:如何基于ExtraEvent.IsWorkingDay为PivotGridControl单元格设置数据触发器
DevExpress PivotGridControl 单元格着色数据触发器设置
问题背景
现有如下PivotGridControl字段配置:
<dxpg:PivotGridControl.Fields> <dxpg:PivotGridField FieldName="CourierFullName" Area="RowArea" Caption="Courier"/> <dxpg:PivotGridField FieldName="Header" Area="ColumnArea" Caption="Data" ValueFormat="yyyy-MM-dd" SortOrder="Descending"/> <dxpg:PivotGridField Area="DataArea" SummaryType="Min" CellTemplate="{StaticResource CellTemplate}"/> </dxpg:PivotGridControl.Fields>
数据由以下类提供:
public class CourierFlattenRow { public DateTime Header { get; set; } public string CourierFullName { get; set; } public TariffZone TariffZone { get; set; } public DeliveryTerm DeliveryTerm { get; set; } public CourierExtraEvent ExtraEvent { get; set; } } // 需确保CourierExtraEvent包含IsWorkingDay属性 public class CourierExtraEvent { public bool IsWorkingDay { get; set; } // 其他属性... }
需求:设置数据触发器,当ExtraEvent.IsWorkingDay == true时,为数据区域的单元格着色。
解决方案
由于数据字段使用了自定义CellTemplate,直接在模板内为单元格容器添加带数据触发器的样式即可,核心是通过PivotCellData的RowData.Row属性绑定到CourierFlattenRow实体,进而判断目标属性值:
修改CellTemplate定义
<DataTemplate x:Key="CellTemplate"> <Border x:Name="cellContainer" Padding="4" Background="Transparent"> <TextBlock Text="{Binding Value}"/> </Border> <DataTemplate.Triggers> <!-- 当IsWorkingDay为true时设置单元格样式 --> <DataTrigger Binding="{Binding RowData.Row.ExtraEvent.IsWorkingDay}" Value="True"> <Setter TargetName="cellContainer" Property="Background" Value="#E8F5E9"/> <Setter TargetName="cellContainer" Property="Foreground" Value="#2E7D32"/> </DataTrigger> <!-- 可选:处理ExtraEvent为null的情况 --> <DataTrigger Binding="{Binding RowData.Row.ExtraEvent, TargetNullValue=False}" Value="False"> <Setter TargetName="cellContainer" Property="Background" Value="Transparent"/> </DataTrigger> </DataTemplate.Triggers> </DataTemplate>
关键说明
- PivotGrid单元格的数据上下文是
PivotCellData类型,RowData.Row直接对应数据源中的CourierFlattenRow实例 - 如果
ExtraEvent可能为null,必须添加空值判断的触发器,避免绑定失效 - 可根据需求替换背景色、前景色的具体值,调整样式细节
内容的提问来源于stack exchange,提问作者Bimka09
相关产品推荐
相关产品推荐

