【发布时间】:2011-07-11 17:45:32
【问题描述】:
我正在使用 MVVM 模式重新创建搜索控件。我们当前的实现做了很多代码隐藏工作来创建这个控件。
我在 SearchControl.xaml 中有一个 WPF 工具包数据网格
<wtk:DataGrid Name="ResultsGrid"
Grid.Row="4"
Grid.ColumnSpan="4"
Height="Auto"
AutoGenerateColumns="True"
ItemsSource="{Binding Path=.}"
DataContext="{Binding Path=Results}"
CanUserAddRows="False"
CanUserDeleteRows="False"
IsReadOnly="True"
AutoGeneratedColumns="ResultsGrid_AutoGeneratedColumns"
VerticalScrollBarVisibility="Auto"/>
控件绑定到一个 SearchControlViewModel,它有一个 Results 属性
public DataTable Results
{
get { return _results; }
set
{
_results = value;
OnPropertyChanged("Results");
OnPropertyChanged("ShowResults");
}
}
这适用于较小的数据集,但在给定包含 16K+ 行的数据表时会崩溃。这本质上是当前实现的粘贴复制的副本,主要区别在于通过绑定应用 DataGrid 的数据上下文,而不是在代码隐藏中设置它。
感谢您的帮助。
【问题讨论】:
-
异常详情?堆栈跟踪?
-
Protip:DataTable 中的 16k 行是不好的。这就是我们有“分页”的原因。
-
@Jay:最终应用程序抛出 OutOfMemoryException。当它崩溃时,我会让它运行并发布跟踪(如果有的话)
-
@Will:是的,这是一个内部框架,这还不是问题。可能是时候对我们的结果进行分页了。
标签: wpf performance mvvm datagrid binding