首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF数据虚拟化和DataGrid

WPF数据虚拟化和DataGrid
EN

Stack Overflow用户
提问于 2011-10-18 03:54:30
回答 3查看 3.4K关注 0票数 4

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

它可以很好地与ListView控件配合使用。

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

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

我不知道原因是什么,也不知道如何阻止它的发生。我需要DataGrid控件的编辑功能

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-18 05:08:33

你在用字典吗?调试并检查您是否尝试将空值作为键添加到字典中。或者检查您尝试插入的带有空键的网格视图上是否有DataKeyNames参数。

只需在加载/填充数据的地方进行调试(F10/F11)。在Visual Studio中查看“局部变量”窗口。

票数 3
EN

Stack Overflow用户

发布于 2015-06-30 23:03:11

我也遇到过这种情况。原来问题出在VirtualizingCollection (AsyncVirtualizingCollection的基类)中的以下代码:

代码语言:javascript
复制
public T this[int index]
{
   // snip

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

   // snip
}

如果T是引用类型,则default(T)null,并且DataGrid不支持null行对象。

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

public T DefaultValue = default(T);

并将上面的代码从default(T)改为返回DefaultValue。然后,当我构造AsyncVirtualizingCollection时,我将DefaultValue设置为一个在加载过程中显示的虚拟对象。

票数 5
EN

Stack Overflow用户

发布于 2014-11-14 12:47:17

我发现这个异常实际上是在DataGridItemAttachedStorage类中发生的。这里有一些调用栈框架,希望有人能给我一些关于it.Sorry的线索,关于我糟糕的英语。

代码语言:javascript
复制
mscorlib.dll!System.Collections.Generic.Dictionary<object,System.Collections.Generic.Dictionary<System.Windows.DependencyProperty,object>>.FindEntry(object key)    未知
    mscorlib.dll!System.Collections.Generic.Dictionary<object,System.Collections.Generic.Dictionary<System.Windows.DependencyProperty,object>>.TryGetValue(object key, out System.Collections.Generic.Dictionary<System.Windows.DependencyProperty,object> value)   未知

    PresentationFramework.dll!System.Windows.Controls.DataGridItemAttachedStorage.TryGetValue(object item, System.Windows.DependencyProperty property, out object value)    未知
    PresentationFramework.dll!System.Windows.Controls.DataGridRow.RestoreAttachedItemValue(System.Windows.DependencyObject objectWithProperty, System.Windows.DependencyProperty property)  未知
    PresentationFramework.dll!System.Windows.Controls.DataGridRow.SyncProperties(bool forcePrepareCells)    未知
    PresentationFramework.dll!System.Windows.Controls.DataGridRow.PrepareRow(object item, System.Windows.Controls.DataGrid owningDataGrid)  未知
    PresentationFramework.dll!System.Windows.Controls.DataGrid.PrepareContainerForItemOverride(System.Windows.DependencyObject element, object item)    未知
    PresentationFramework.dll!System.Windows.Controls.ItemsControl.MS.Internal.Controls.IGeneratorHost.PrepareItemContainer(System.Windows.DependencyObject container, object item) 未知
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7798809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档