Wpf 仅在数据网格上滚动时调用IValueConverter
请看以下XAML片段: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
<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
setScrollViewer.CanContentScroll=“False”
以物理单位显示滚动条。也许有帮助。