C# OnPropertyChanged触发空异常

C# OnPropertyChanged触发空异常,c#,wpf,xaml,devexpress,prism,C#,Wpf,Xaml,Devexpress,Prism,我有一个数据集,它由一组Solutions组成 每个解决方案都有A、B和C字段 我将数据源设置为: DataSource = GetDataSource(); 我的图表的XAML很简单: <dxc:ChartControl x:Name="ChartControl" DataSource="{Binding DataSource}" CrosshairEnabled="True" ToolTipEnabled=

我有一个数据集,它由一组
Solution
s组成

每个解决方案都有A、B和C字段

我将数据源设置为:

DataSource = GetDataSource();

我的图表的XAML很简单:

<dxc:ChartControl x:Name="ChartControl" 
                  DataSource="{Binding DataSource}" 
                  CrosshairEnabled="True" ToolTipEnabled="False">
    <dxc:ChartControl.Diagram>
        <dxc:XYDiagram2D SeriesDataMember="A" Rotated="True">
            <dxc:XYDiagram2D.SeriesTemplate>
                <dxc:PointSeries2D ArgumentDataMember="B" ValueDataMember="C"
                                   ArgumentScaleType="Auto" ValueScaleType="Auto">
                </dxc:PointSeries2D>
            </dxc:XYDiagram2D.SeriesTemplate>
        </dxc:XYDiagram2D>
    </dxc:ChartControl.Diagram>
</dxc:ChartControl>
注**
如果我选择
numeric
的ScaleTypes而不是
Auto

一个没有订阅者的
事件
null
,问题就会消失。问题可能是您的
事件
没有订户。因此,在调用之前,您需要检查
事件
是否为
null

if (OnPropertyChanged != null)
{
    OnPropertyChanged("HasData");
    OnPropertyChanged("DataSource");
}

给我们看看例外情况。嘿,我会在可能的时候(可能是星期一)发布它。对不起,我以为我已经贴上去了,但一定是打错了…@Tyler-我添加了StackTrace,抱歉耽搁了!那个代码不对。PropertyChanged是事件,而不是OnPropertyChanged。此检查应在OnPropertyChanged方法内进行。我们无法从提供的代码中判断他是否正在这样做工作正常。是数据源导致了这个问题。
   at DevExpress.Charts.Native.RefinedSeriesGroup.UpdateTransformation()
   at DevExpress.Charts.Native.RefinedSeriesGroupController.UpdateAxisData(IEnumerable`1 axes, IMinMaxValuesCalculator minMaxCalculator)
   at DevExpress.Charts.Native.SeriesController.UpdateRange(ChartUpdateAggregator updateAggregator)
   at DevExpress.Charts.Native.SeriesController.ApplyUpdates(ChartUpdateAggregator updateAggregator, Boolean pointsUpdated, Boolean isContainsProcessedPointsBeforeUpdate)
   at DevExpress.Charts.Native.SeriesController.SeriesControllerTransaction.Commit()
   at DevExpress.Charts.Native.SeriesController.CommitTransaction()
   at DevExpress.Xpf.Charts.Native.ViewController.ProcessChanged(ChartUpdate update)
   at DevExpress.Xpf.Charts.Native.ViewController.EndUpdateData()
   at DevExpress.Xpf.Charts.Diagram.UpdateBinding()
   at DevExpress.Xpf.Charts.ChartControl.<.ctor>b__0()
   at DevExpress.Xpf.Charts.Native.BindingBehavior.UpdateActualDataSource(Object newDataSource)
   at DevExpress.Xpf.Charts.ChartControl.DataSourcePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
   at System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
   at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
   at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)
   at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)
   at System.Windows.DependencyObject.InvalidateProperty(DependencyProperty dp, Boolean preserveCurrentValue)
   at System.Windows.Data.BindingExpressionBase.Invalidate(Boolean isASubPropertyChange)
   at System.Windows.Data.BindingExpression.TransferValue(Object newValue, Boolean isASubPropertyChange)
   at System.Windows.Data.BindingExpression.ScheduleTransfer(Boolean isASubPropertyChange)
   at MS.Internal.Data.ClrBindingWorker.NewValueAvailable(Boolean dependencySourcesChanged, Boolean initialValue, Boolean isASubPropertyChange)
   at MS.Internal.Data.PropertyPathWorker.UpdateSourceValueState(Int32 k, ICollectionView collectionView, Object newValue, Boolean isASubPropertyChange)
   at MS.Internal.Data.ClrBindingWorker.OnSourcePropertyChanged(Object o, String propName)
   at MS.Internal.Data.PropertyPathWorker.OnPropertyChanged(Object sender, PropertyChangedEventArgs e)
   at System.Windows.WeakEventManager.ListenerList`1.DeliverEvent(Object sender, EventArgs e, Type managerType)
   at System.ComponentModel.PropertyChangedEventManager.OnPropertyChanged(Object sender, PropertyChangedEventArgs args)
   at Microsoft.Practices.Prism.Mvvm.BindableBase.OnPropertyChanged(String propertyName)
   at KOP_Report_Generator.ViewModel.DataSourceViewModelBase.set_DataSource(Array value) in c:\Users\a-vishar\Documents\Visual Studio 2012\Projects\KOP Report Generator\KOP Report Generator\ViewModel\DataSourceViewModelBase.cs:line 27
   at KOP_Report_Generator.ViewModel.ExampleViewModel.Refresh(DataTable datatable) in c:\Users\a-vishar\Documents\Visual Studio 2012\Projects\KOP Report Generator\KOP Report Generator\ViewModel\ExampleViewModel.cs:line 28
   at KOP_Report_Generator.ViewModel.MainViewModel.<>c__DisplayClass1.<GenerateCharts>b__0(IDataSourceViewModel m) in c:\Users\a-vishar\Documents\Visual Studio 2012\Projects\KOP Report Generator\KOP Report Generator\ViewModel\MainViewModel.cs:line 133
   at Extensions.CollectionExtensions.ForEach[T](IEnumerable`1 collection, Action`1 action) in c:\Users\a-vishar\Documents\Visual Studio 2012\Projects\KOP Report Generator\Extensions\CollectionExtensions.cs:line 125
   at KOP_Report_Generator.ViewModel.MainViewModel.GenerateCharts() in c:\Users\a-vishar\Documents\Visual Studio 2012\Projects\KOP Report Generator\KOP Report Generator\ViewModel\MainViewModel.cs:line 133
   at KOP_Report_Generator.View.Tabs.HomeTabView.GenerateCharts(Object sender, RoutedEventArgs e) in c:\Users\a-vishar\Documents\Visual Studio 2012\Projects\KOP Report Generator\KOP Report Generator\View\Tabs\HomeTabView.xaml.cs:line 34
   at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
   at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
   at System.Windows.UIElement.RaiseEvent(RoutedEventArgs e)
   at System.Windows.Controls.Primitives.ButtonBase.OnClick()
   at System.Windows.Controls.Button.OnClick()
   at System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e)
   at System.Windows.UIElement.OnMouseLeftButtonUpThunk(Object sender, MouseButtonEventArgs e)
   at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
   at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
   at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
   at System.Windows.UIElement.ReRaiseEventAs(DependencyObject sender, RoutedEventArgs args, RoutedEvent newEvent)
   at System.Windows.UIElement.OnMouseUpThunk(Object sender, MouseButtonEventArgs e)
   at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
   at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
   at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
   at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
   at System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)
   at System.Windows.UIElement.RaiseEvent(RoutedEventArgs args, Boolean trusted)
   at System.Windows.Input.InputManager.ProcessStagingArea()
   at System.Windows.Input.InputManager.ProcessInput(InputEventArgs input)
   at System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)
   at System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel)
   at System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at System.Windows.Interop.HwndSource.InputFilterMessage(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 MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, 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.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
   at System.Windows.Threading.Dispatcher.Run()
   at System.Windows.Application.RunDispatcher(Object ignore)
   at System.Windows.Application.RunInternal(Window window)
   at System.Windows.Application.Run(Window window)
   at System.Windows.Application.Run()
   at KOP_Report_Generator.App.Main() in c:\Users\a-vishar\Documents\Visual Studio 2012\Projects\KOP Report Generator\KOP Report Generator\obj\Debug\App.g.cs:line 50
   at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
   at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
   at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
   at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   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 System.Threading.ThreadHelper.ThreadStart()
if (OnPropertyChanged != null)
{
    OnPropertyChanged("HasData");
    OnPropertyChanged("DataSource");
}