Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF:两个数据网格的同步滚动变得缓慢,其中一个具有绑定的图像列_Wpf_Image_Datagrid_Smooth Scrolling_Datagridtemplatecolumn - Fatal编程技术网

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

WPF:两个数据网格的同步滚动变得缓慢,其中一个具有绑定的图像列,wpf,image,datagrid,smooth-scrolling,datagridtemplatecolumn,Wpf,Image,Datagrid,Smooth Scrolling,Datagridtemplatecolumn,我有两个DataGrids,我有同步滚动(在一个网格上滚动会导致另一个网格滚动)。其中一个网格有一个DataGridTemplateColumn,其中DataTemplate设置为Image: <DataGridTemplateColumn Width="16"> <DataGridTemplateColumn.CellStyle> <Style TargetType="DataGridCell"> <Ev

我有两个
DataGrid
s,我有同步滚动(在一个网格上滚动会导致另一个网格滚动)。其中一个网格有一个
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>
这导致默认转换器失败,从而导致滚动变得缓慢,因为每次滚动发生时都会调用属性getter

吸取的教训 正如Steven所说,确保没有绑定错误

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

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


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

您是否尝试在数据网格上设置虚拟化?也可以帮助您。我刚刚使用即时窗口(第一次)在运行时将一些元素添加到列表中,并看到了这些绑定错误。在那之后,我来这里检查是否有任何答案。在阅读了你的答案和绑定错误后,我现在知道问题出在哪里了!非常感谢。
var d2 = (from l in t.Item2
          select new ProgramLine { Blank = String.Emtpty, Line = l}).ToList();
dataGrid2.ItemsSource = d2;