我有两个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应用程序时使用立即窗口
答案 0 :(得分:3)
在VS Output窗口中查找绑定错误。
您也可以直接在绑定到图像源时使用此附加属性:diagnostics:PresentationTraceSources.TraceLevel=High
命名空间诊断位于:xmlns:diagnostics="clr-namespace:System.Diagnostics;assembly=WindowsBase"
之后,您可以在“输出”窗口中再次找到有关绑定的更多信息。
不幸的是,绑定错误能够带来巨大的性能损失。因此,当您使用任何WPF应用程序时,请尝试完全消除它们。
顺便说一句,你没有必要进行绑定TwoWay
,因为Image
控件只能改变属性值。它的OneWay
控件只接受给定的值。
编辑:有一些WPF DataGrid控件性能提示可以使用link