1

我有两个DataGrids 并且我有同步滚动(在一个网格上滚动会导致其他网格滚动)。其中一个网格的 a DataGridTemplateColumnwithDataTemplate设置为 a 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属性绑定操作会导致每次滚动时出现缓慢,因为如果我将绑定设置为 a 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 应用程序时使用即时窗口

4

1 回答 1

3

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

顺便说一句,您不必进行绑定TwoWay,因为Image控件无法将属性值更改回来。它的OneWay控件只接受给定的值。

编辑:您可以使用一些 WPF DataGrid 控件性能提示链接

于 2013-07-19T08:14:08.603 回答