请查看以下 XAML 代码段:
<DataGridTextColumn.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="Background" Value="White"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Block.TextAlignment" Value="Center"/>
<Setter Property="Background">
<Setter.Value>
<SolidColorBrush>
<SolidColorBrush.Color>
<MultiBinding Converter="{StaticResource VAPBrushConverter}">
<Binding RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type DataGridCell}}"/>
<Binding RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type UserControl}}"/>
</MultiBinding>
</SolidColorBrush.Color>
</SolidColorBrush>
</Setter.Value>
</Setter>
</Style>
</DataGridTextColumn.CellStyle>
IValueConverter仅在我在数据网格上滚动时才被调用。在 DataGridCell 中有一个 TextBlock,唯一一次调用 IValueConverter 的时间是 TextBlock.Text 属性为 DependencyProperty.UnsetValue 时。
有人可以告诉我何时调用 IValueConverter,以及我目前是否可以对我的代码做些什么来解决这个问题?澄清一下 - 问题是当我在 DataGrid 上滚动时,背景仅由 IValueConverter 设置。
我通过将绑定设置为项目源中的当前元素来解决此问题,如下所示:
<Binding Path="."/>
<Binding RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type UserControl}}"/>
看起来问题在于 IValueConverter 仅在调用 get/set 访问器时被调用。我在绑定中传递了 DataGridCell,该绑定仅在滚动时获取/设置。每当值更改时,都会获取/设置单元格的内容,因此这意味着IValueConverter将相应地更新。