C# &引用;对象引用未设置为对象的实例;在呈现框架中进行动态造型
我在我的LifeShape筛选的PresentationFramework中得到一个空引用: 堆栈跟踪没有给我多少线索: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
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);