C# 从DataGrid到ItemsSource的调用过多
我有一个包含WPF工具包datagrid的WPF应用程序 下面是DataGrid控件的XAML代码C# 从DataGrid到ItemsSource的调用过多,c#,wpf,data-binding,C#,Wpf,Data Binding,我有一个包含WPF工具包datagrid的WPF应用程序 下面是DataGrid控件的XAML代码 <wpf_toolkit:DataGrid ItemsSource="{Binding Plans, Mode=OneTime}" Grid.Row="0" x:Name="PlanDataGrid" ColumnWidth="auto" HorizontalScrollBarVisibility="Auto"> <wpf_toolkit:DataGrid.Colum
<wpf_toolkit:DataGrid ItemsSource="{Binding Plans, Mode=OneTime}" Grid.Row="0" x:Name="PlanDataGrid" ColumnWidth="auto" HorizontalScrollBarVisibility="Auto">
<wpf_toolkit:DataGrid.Columns>
<wpf_toolkit:DataGridTextColumn Header="Key Note Name" IsReadOnly="True"
Binding="{Binding Path=KeyNotepad, Mode=OneTime}" />
<wpf_toolkit:DataGridTextColumn Header="SKO Name" IsReadOnly="True"
Binding="{Binding Path=SKOName, Mode=OneTime}" />
<wpf_toolkit:DataGridTextColumn Header="SKO Version" IsReadOnly="True"
Binding="{Binding Path=SKOVer, Mode=OneTime}" />
<-- Other 10 columns with data templates, bindings etc. -->
</wpf_toolkit:DataGrid.Columns>
</wpf_toolkit:DataGrid>
DataGrid的ItemsSource属性绑定到简单的基于字符串的视图模型集合
所以,问题是DataGrid从items源列中获取数据的次数大约是应用程序错误次数的27*13倍
有没有办法减少从DataGrid到源项的调用数量
提前感谢。我看到的问题是未启用行虚拟化。这将导致DataGrid为ItemsSource中的所有项创建可视元素,而不仅仅是那些可见的项。 要启用虚拟化,您需要在DataGrid上设置此属性
EnableRowVirtualization="True"
为了安全起见,您需要从VirtualzingStackPanel设置附加属性
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Recycling"
虚拟化模式将导致DataGrid重用可视行,而不是在每次滚动时生成新的行。虽然我不确定你是否可以使用它,因为看起来你正在使用WpfToolkit。您的目标是.NET 3.5吗?谢谢您的回复。对我使用.NET3.5。我已经将包含datagrid的控件设置为静态,因此一些加载在应用程序启动时结束。但是,当我滚动DataGrid时,它会加载数据,但不像第一次加载那么多。关于虚拟化的几句话。绑定到DataGrid的数据源的工作方式类似于数据虚拟化容器 这里是链接。 我的数据源是similas。此外,我还为网格创建了一种样式,它支持虚拟化并链接到datagrid,我忘了在这里的代码示例中编写它。但一切都没有改变。以下是我的风格以及我如何将其链接到DataGrid
<Style x:Key="vd_datagrid_style" BasedOn="{StaticResource {x:Type wpf_toolkit:DataGrid}}"
TargetType="{x:Type wpf_toolkit:DataGrid}">
<Setter Property="VirtualizingStackPanel.IsVirtualizing" Value="True"/>
<Setter Property="VirtualizingStackPanel.VirtualizationMode" Value="Recycling"/>
<Setter Property="ScrollViewer.IsDeferredScrollingEnabled" Value="True"/>
</Style>
<wpf_toolkit:DataGrid ItemsSource="{Binding Plans, Mode=OneTime}" Grid.Row="0" x:Name="PlanDataGrid"
Style="{StaticResource vd_datagrid_style}" SelectedItem="{Binding SelectedPlan, Mode=TwoWay}">
嗯。。。我将尝试为我的风格添加EnableRowVirtualization=True
还有,有没有办法检查样式是否连接到控件