Wpf 仅在数据网格上滚动时调用IValueConverter

Wpf 仅在数据网格上滚动时调用IValueConverter,wpf,xaml,ivalueconverter,multibinding,Wpf,Xaml,Ivalueconverter,Multibinding,请看以下XAML片段: <DataGridTextColumn.CellStyle> <Style TargetType="{x:Type DataGridCell}"> <Setter Property="Background" Value="White"/> <Setter Property="BorderThickness" Value="0"/> <Setter Property

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

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

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


问题似乎是只有在调用get/set访问器时才调用IValueConverter。我在绑定中传递DataGridCell,该绑定在滚动时仅为get/set。每当值更改时,单元格的内容都会被获取/设置,因此这意味着IValueConverter将相应地更新。

我也有同样的问题。使用多重绑定和转换器时,这会过于复杂。为您的行创建一个合适的ViewModel,并使用一些“更容易”的值来绑定或使用
DataTriggers
@HighCore我理解您的意思,但是我的ViewModels正在被直接转换为JSON,以便在另一个API中使用,所以我不能仅仅为我的前端应用程序添加随机属性。我可以创建某种装饰器,但为了保持一致性,我更喜欢使用转换器。@Sherlock,这真是太尴尬了。视图模型不是数据。如果您需要发送(JSON或其他)到另一个API或应用程序,您应该真正序列化您的模型,而不是ViewModels。ViewModels正是作为模型和UI之间的中介(与转换器相同,但更干净,IMO)尝试使用
DataGrid
set
ScrollViewer.CanContentScroll=“False”
以物理单位显示滚动条。也许有帮助。