WPF 数据虚拟化和 DataGrid

Att*_*lah 4 .net c# wpf

我正在使用 Paul McClean 描述的数据虚拟化:http : //www.codeproject.com/KB/WPF/WpfDataVirtualization.aspx

它适用于 ListView 控件。

但是当我将它与 DataGrid 控件(AsyncVirtualizationCollection)一起使用时,它会引发异常:

“值不能为空,参数名称:键”

我不知道原因是什么以及如何阻止这种情况发生。我需要DataGrid控件的编辑功能

dlf*_*dlf 5

我也遇到了这个。原来问题出在VirtualizingCollection(的基类AsyncVirtualizingCollection)中的这段代码:

public T this[int index]
{
   // snip

   // defensive check in case of async load
   if (_pages[pageIndex] == null)
      return default(T);

   // snip
}
Run Code Online (Sandbox Code Playgroud)

IfT是引用类型,default(T)is null,并且DataGrid不支持空行对象。

为了解决这个问题,我添加了一个公共属性VirtualizingCollection来保存默认值:

public T DefaultValue = default(T);

并将上面的代码更改为 returnDefaultValue而不是default(T). 然后,当我构建 my 时AsyncVirtualizingCollection,我设置DefaultValue了一个在加载过程中显示的虚拟对象。


juF*_*uFo 3

你用字典吗?调试并检查是否尝试添加空值作为字典中的键。或者检查 gridview 上是否有 DataKeyNames 参数以及您尝试插入的空键。

只需调试加载/填充数据的位置 (F10/F11)。在 Visual Studio 中观看本地窗口。