gpt4 book ai didi

c# - WPF 工具包 DataGridCell 样式 DataTrigger

转载 作者:行者123 更新时间:2023-11-30 14:04:06 24 4
gpt4 key购买 nike

如果值已在 DataGrid 中更新,我正在尝试将单元格的颜色更改为黄色。

我的 XAML:

<toolkit:DataGrid x:Name="TheGrid"
ItemsSource="{Binding}"
IsReadOnly="False"
CanUserAddRows="False"
CanUserResizeRows="False"
AutoGenerateColumns="False"
CanUserSortColumns="False"
SelectionUnit="CellOrRowHeader"
EnableColumnVirtualization="True"
VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Auto">
<toolkit:DataGrid.CellStyle>
<Style TargetType="{x:Type toolkit:DataGridCell}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsDirty}" Value="True">
<Setter Property="Background" Value="Yellow"/>
</DataTrigger>
</Style.Triggers>
</Style>
</toolkit:DataGrid.CellStyle>
</toolkit:DataGrid>

网格绑定(bind)到数组列表(显示类似于 excel 的值表)。数组中的每个值都是一个包含 IsDirty 依赖属性的自定义对象。 IsDirty 属性在值更改时设置。

当我运行这个时:

  • 更改第 1 列中的值 = 整行变为黄色
  • 更改任何其他列中的值 = 没有任何反应

我只希望更改后的单元格变为黄色,无论它在哪一列。你看到我的 XAML 有什么问题了吗?

最佳答案

发生这种情况的原因是因为 DataContext 是在行级别设置的,并且不会针对每个 DataGridCell 进行更改。因此,当您绑定(bind)到 IsDirty 时,它绑定(bind)到行级数据对象的属性,而不是单元级数据对象的属性。

由于您的示例显示您已将 AutoGenerateColumns 设置为 false,我假设您自己生成的列具有类似 DataGridTextColumnBinding 属性设置为绑定(bind)到实际值字段。要将单元格样式更改为黄色,您必须像这样更改每个 DataGridColumn 上的 CellStyle:

foreach (var column in columns)
{
var dataColumn =
new DataGridTextColumn
{
Header = column.Caption,
Binding = new Binding(column.FieldName),
CellStyle =
new Style
{
TargetType = typeof (DataGridCell),
Triggers =
{
new DataTrigger
{
Binding = new Binding(column.FieldName + ".IsDirty"),
Setters =
{
new Setter
{
Property = Control.BackgroundProperty,
Value = Brushes.Yellow,
}
}
}
}
}
};
_dataGrid.Columns.Add(dataColumn);
}

您可以尝试使用 DataGridColumn.CellStyle 更改每个单元格的 DataContext。也许只有这样,您才能像您一样直接从网格级样式将单元格绑定(bind)到“IsDirty”,而无需为每一列单独执行此操作。但我没有实际的数据模型,您必须对此进行测试。

关于c# - WPF 工具包 DataGridCell 样式 DataTrigger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2830521/

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