仅在DataGrid上滚动时调用IValueConverter

时间:2013-10-06 17:10:31

标签: wpf xaml ivalueconverter multibinding

查看以下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设置。

1 个答案:

答案 0 :(得分:0)

我通过将绑定设置为项目源中的当前元素来解决此问题,如下所示:

<Binding Path="."/>
<Binding RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type UserControl}}"/>

看起来问题是只在调用get / set访问器时才调用IValueConverter。我在绑定中传递DataGridCell,它只在滚动时获取/设置。只要值发生变化,就会获取/设置单元格的内容,这意味着IValueConverter将相应地更新。