WPF:两个DataGrids的同步滚动变得缓慢,其中一个DataGrids具有带绑定的图像列

时间:2013-07-19 05:36:04

标签: wpf image datagrid smooth-scrolling datagridtemplatecolumn

我有两个DataGrid并且我有同步滚动(在一个网格上滚动导致其他滚动)。其中一个网格的DataGridTemplateColumn DataTemplate设置为Image

<DataGridTemplateColumn Width="16">
    <DataGridTemplateColumn.CellStyle>
        <Style TargetType="DataGridCell">
            <EventSetter Event="PreviewMouseLeftButtonDown" Handler="CommentIcon_Clicked" />
        </Style>
    </DataGridTemplateColumn.CellStyle>

    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <Image Source="{Binding Blank, Mode=TwoWay}"/>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

数据绑定到网格后,滚动变得非常迟缓和缓慢。因此我怀疑它的Source属性绑定操作会导致每次滚动时出现缓慢,因为如果我将绑定设置为StaticResource,则滚动变得平滑。有办法解决这个问题吗?

更新 问题是由于Image源的绑定错误。绑定到Image源的属性的值是一个空字符串:

var d2 = (from l in t.Item2
          select new ProgramLine { Blank = String.Emtpty, Line = l}).ToList();
dataGrid2.ItemsSource = d2;

这导致默认转换器失败,从而导致滚动变得迟缓,因为每次滚动时都会调用属性getter。

经验教训 像Steven说的那样,确保没有绑定错误

提示 在调试模式下运行WPF应用程序时使用立即窗口

1 个答案:

答案 0 :(得分:3)

在VS Output窗口中查找绑定错误。 您也可以直接在绑定到图像源时使用此附加属性:diagnostics:PresentationTraceSources.TraceLevel=High 命名空间诊断位于:xmlns:diagnostics="clr-namespace:System.Diagnostics;assembly=WindowsBase" 之后,您可以在“输出”窗口中再次找到有关绑定的更多信息。 不幸的是,绑定错误能够带来巨大的性能损失。因此,当您使用任何WPF应用程序时,请尝试完全消除它们。

顺便说一句,你没有必要进行绑定TwoWay,因为Image控件只能改变属性值。它的OneWay控件只接受给定的值。

编辑:有一些WPF DataGrid控件性能提示可以使用link