以下代码在_items.Clear()
步骤中给出了一个Null Reference Exception,我无法解决原因。
public void PlotDate()
{
if (_data == null) return;
_items.Clear();
_items.Add(new Graph
{
Name = "by date",
Items = _data.GroupBy(e => string.Format("{0:yyyy-MMM}", e.Date))
.Select(g => new Item { Key = g.Key, Value = g.Sum(x => x.Size) })
.OrderByDescending(e => e.Value)
.ToList()
});
}
_items
是一个可绑定的图形集合,显示在xaml前端中。在这个例子中,图表只显示了一系列日期中所有尺寸总和的饼图。在课堂上,有一些方法可以显示几乎相同的不同数据,它们基本上只是对数据进行不同的分组。
奇怪的是,第一个总是加载得很好,无论我选择哪个,但是当我尝试打开第二个时,它会抛出异常。首次打开视图时,它还会运行一个填充_data
并运行_items.Clear
的方法,因此当_items
为空时它可以正常工作。
我在任何想到的地方都设置了断点,试着看看发生了什么,但没有任何东西被设置为空。在_items.Clear
步骤运行之前,_items
的计数为1,然后在计数降至0之后立即抛出异常。
我还尝试使用_items.RemoveAt(0)
,并在添加新图表之后添加它并执行相同的操作。
发生了什么?
编辑:我将包含可能有用的此部分。 UI上的显示绑定到Items,由此确定,因此它可能是问题所在。我无法深入了解,看看NotifyOfPropertyChange的定义并没有产生任何有用的信息。
partial void OnItemsChanged();
public BindableCollection<Graph> Items
{
get { return _items; }
set
{
if (value == _items)
return;
_items = value;
OnItemsChanged();
NotifyOfPropertyChange("Items");
}
}
答案 0 :(得分:0)
如果没有剩下的代码,很难知道出了什么问题。调用Clear
函数时,异常可能发生在其他地方。为了帮助您进行调试,您可以将VS配置为通过
调试菜单 - &gt;例外.. - &gt;公共语言运行时异常 - &GT;系统 - &GT; System.NullReferenceException - &gt;检查投掷
VS将停在引发异常的代码行。
答案 1 :(得分:0)
也许_items为空。 只需在_items.Clear()行添加断点并调试应用程序。
答案 2 :(得分:0)
从堆栈跟踪中我可以看到在Clear()调用触发的OnCollectionChanged事件中抛出了异常。所以你应该检查一下这个事件会发生什么,并且应该在
之前显示System.Collections.ObjectModel.ObservableCollection1.OnCollectionChanged(通知CollectionChangedEventArgs E)
堆栈跟踪线。