C# &引用;对象引用未设置为对象的实例;在呈现框架中进行动态造型

C# &引用;对象引用未设置为对象的实例;在呈现框架中进行动态造型,c#,wpf,collectionviewsource,C#,Wpf,Collectionviewsource,我在我的LifeShape筛选的PresentationFramework中得到一个空引用: 堆栈跟踪没有给我多少线索: at System.Windows.Data.ListCollectionView.RestoreLiveShaping() at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs) at Syst

我在我的LifeShape筛选的PresentationFramework中得到一个空引用:

堆栈跟踪没有给我多少线索:

   at System.Windows.Data.ListCollectionView.RestoreLiveShaping()
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
   at System.Windows.Threading.DispatcherOperation.InvokeImpl()
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at MS.Internal.CulturePreservingExecutionContext.Run(CulturePreservingExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Windows.Threading.DispatcherOperation.Invoke()
   at System.Windows.Threading.Dispatcher.ProcessQueue()
   at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
   at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
   at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
   at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
   at System.Windows.Window.ShowHelper(Object booleanBox)
   at System.Windows.Window.ShowDialog()
   at MVVMSeaCores.AppWindowManager.ShowDialog(Object rootModel, Object context, IDictionary`2 settings)
最后一行是显示UX的对话框调用,其中包含绑定到
ShowOnGraph
的复选框

我根据一个布尔属性“showonggraph”将活动形状设置为这样:

showonggraph
设置为false时,项目将按预期进行过滤。但是,只要我尝试使用
showonggraph=true
取消过滤任何内容,就会出现此异常

这不是的副本。我知道空引用异常是什么。但在本例中,空引用位于表示框架中的System.Windows.Data中。我不知道什么是null,为什么(列表不包含任何null条目,filter属性是bool,不能为null)

空对象不在我的代码中,并且不可用于调试。我在调试器中得到的只是发生这种情况时它在调度中的位置。在一种情况下,在包含列表的对话框中,我将其设置为true:

没有空的

我将只制作一个按钮来设置showonggraph=false,并查看异常发生的位置


编辑:是的,它发生在“无处”。只是在一个空白的“中断模式”页面上打开,没有任何内容或错误发生的位置指示。

我建议您将自己设置为从解决方案中调试Microsoft dll

然后确保您的调试设置检查了所有可能的异常类型,然后当您再次运行应用程序并中断异常时,您将得到一个完整的堆栈跟踪,可以帮助您解决isse。

找到了解决方案

我直接创建了视图(而不是使用默认视图,因为我有两个来自此集合的视图:

KPIBarsView = new CollectionViewSource { Source = KPIBars }.View;
我读了这篇文章后就这么做了:

以及以下问题:

但是,我尝试创建一个新集合,用相同的项目填充它,并使用:

KPIBarsView = CollectionViewSource.GetDefaultView(KPIBars);

已解决此问题。希望这对其他偶然发现此问题的人有所帮助。

johnDisplayClass的评论非常有用


对我有效的一点是:如果我还保留了对每个新CollectionViewSource及其CollectionView的成员引用。这使我的实时成形和过滤工作正常。仅此一点就解决了OP遇到的同一个空引用


防止此空异常的另一种方法是在CollectionViewSource或CollectionView被垃圾收集之前,将IsLiveSorting/IsLiveGrouping/IsLiveFiltering设置为false。

这不是“What's a null reference”的重复…我知道空引用异常是什么。那么,您是否尝试过调试它,并在本地窗口中查看哪些可能为空,哪些不应为空?Visual Studio是一个非常强大的调试工具(假设您使用的是VS)。了解如何使用它。我无法调试发生错误的System.Windows.Data。调试器没有提供关于什么是空的或不是空的信息。那么,我不知道您希望通过在此处发布问题得到什么。我们对
System.Windows.Data
类的工作方式没有您更深入的了解。您尝试过吗将此作为错误提交给Microsoft?在将其发布到此处之前,您是否对此进行过任何研究,以查看是否有其他人有此问题?我想知道,在直接提交给Microsoft之前,我是否没有遗漏任何明显的问题,或者是否有其他人有类似的问题,或者是否知道可能会发生这种情况。大多数time是我的错,而不是它是系统中的一个bug。我在谷歌上搜索了很多次,没有发现任何类似的东西。这不是一个编程问答网站吗?不管怎样,这都不是重复的。我能找到的最接近的地方是这里:但这不是filteringHmm,它是WindowBase.dll和PresentationFramework的加载符号.dll但仍显示此特定异常的“无可用源代码”。我将继续尝试获取一些调试信息。我有,但无法使用GetDefaultView,因为1)我一直在修改基本集合,需要刷新筛选器;2)我正在使用GetDefaultView不可用的实时整形。你有什么建议吗?我看到你也有“这是重复的!”问题。当你从你正在筛选的集合中删除一个对象时,会发生这种情况吗(不仅仅是过滤它,而是物理删除对象)?这是一个非常奇怪的场景。要复制它,我必须1)在另一个控件中编辑同一对象的不相关属性,2)在两个数据绑定项控件之间拖放该对象,其中拖放事件处理程序也会修改该对象。对我有效的方法是:如果我还保留对每个新CollectionViewSource及其CollectionView的成员引用。这使我的生活塑造和过滤工作。仅此一项就解决了OP遇到的同一个空引用。
KPIBarsView = CollectionViewSource.GetDefaultView(KPIBars);