【问题标题】:WPF Toolkit Data Grid crashing on Binding to 16K row DataTableWPF 工具包数据网格在绑定到 16K 行数据表时崩溃
【发布时间】: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


【解决方案1】:

我的数据网格没有被它的父级正确包含,导致它没有垂直大小限制。正在显示所有行,并且没有发生虚拟化。

【讨论】:

    猜你喜欢
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-31
    • 2017-05-14
    • 2013-03-09
    • 1970-01-01
    • 2010-11-26
    相关资源
    最近更新 更多