следующий код дает мне Null Reference Exception на этапе _items.Clear()
, и я не могу решить, почему.NullReferenceException при удалении элементов из списка
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)
, и положить его после добавления нового графика и он делает то же самое.
Что происходит?
Редактировать: Я включу эту деталь, которая может быть полезна. Дисплей в пользовательском интерфейсе привязывается к элементам, который определяется этим, поэтому может возникнуть проблема. Я не могу глубже понять, но определение определения для NotifyOfPropertyChange не дает никакой полезной информации.
partial void OnItemsChanged();
public BindableCollection<Graph> Items
{
get { return _items; }
set
{
if (value == _items)
return;
_items = value;
OnItemsChanged();
NotifyOfPropertyChange("Items");
}
}
Похож, что '_items' является' null'. Не могли бы вы установить * точку останова * и проверить, не так ли? –
Вы говорите: «он выдает исключение сразу же после того, как счетчик опустится до 0». Означает ли это «элементы».Строка clear() 'выполняется правильно, count равно 0, и она выдает исключение на следующей строке? – vesan
Нет, поэтому я установил точку останова на '_items.Clear()' и проверил '_items', а число равно 1. Затем я делаю« шаг в », и исключение появляется на' _items.Clear() ', и если я снова проверьте '_items' в этой точке, число равно 0, как и должно быть, но я не уверен, почему возникает исключение. – Antyla