Ссылка на объект не указывает на экземпляр объекта во время binding

533
25 мая 2017, 07:37

Всем добрый вечер! Пытаюсь сделать binding к элементу на форме wpf, но вылезает ошибка: Ссылка на объект не указывает на экземпляр объекта. Моя xaml форма имеет следующий код:
<lvc:CartesianChart Grid.Column="1" VisualElements="{Binding Visuals}" Name="chart" />
А сама коллекция для binding образуется следующим образом:

    public VisualElementsCollection visuals;
    public MainWindow()
    {
        InitializeComponent();
        visuals = new VisualElementsCollection();
        EventA = new VisualElement();
        EventB = new VisualElement();

        visuals = new VisualElementsCollection
        {
            new VisualElement
            {
                X = 100,
                Y = 300,
                HorizontalAlignment = HorizontalAlignment.Center,
                VerticalAlignment = VerticalAlignment.Top,
                UIElement = new EventAControl()
            },
            new VisualElement
            {
                X = 50,
                Y = 50,
                HorizontalAlignment = HorizontalAlignment.Center,
                VerticalAlignment = VerticalAlignment.Top,
                UIElement = new EventBControl()
            }
        };
        DataContext = this;
    }
    public VisualElementsCollection Visuals
    { 
        get
        {
            return visuals;
        }
        set
        {
            visuals = value;
            INotifyPropertyChanged("Visuals");
        }
    }
    public event PropertyChangedEventHandler PropertyChanged;
    private void INotifyPropertyChanged(String propertyName = "")
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

Как можно исправить инициализацию объекта, чтобы ошибка это не выходила? Изменил код добавил INotifyPropertyChanged, но все равно ничего не выводит

Answer 1

А пробовали задать в Series="{Binding SeriesCollection}" в xaml разметке где SeriesCollection Ваша коллекция?!

Answer 2

Тут сразу видно несколько проблем.

Во-первых, как правильно подсказывает @Ev_Hyper, вы должны реализовать INotifyPropertyChanged, чтобы ваши изменения подхватывались.

Во-вторых, если вы используете MVVM, то привязываться вы должны не к свойствам окна, а к свойствам вашего DataContext'а. А если вы всё же хотите почему-то привязаться к свойствам окна, вы должны установить на него DataContext (или поменять Source/RelativeSource в привязке.

Ну и в третьих, привязка имеет право вернуть null в промежуточные моменты, так что ваш код внутри lvc:CartesianChart не должен падать, если привязка ничего не возвращает.

READ ALSO
Сериализация объектов в файл

Сериализация объектов в файл

Пришла в голову идея организовать промежуточное сохранение данных, вроде экземпляров класса, в файле, для дальнейшей работы с нимиЗадача...

406
Фокус только на форме

Фокус только на форме

Есть форма, установил свойство KeyPreviewПоставил обработчик KeyPress

264
Как вычислить возраст в С#?

Как вычислить возраст в С#?

почему при вычитании двух дат типа DateTime получается значение типа TimeSpan, и как мне получить отсюда результат типа DateTime?

306
Проблема при обновлении данных в ADO.NET

Проблема при обновлении данных в ADO.NET

Пытаюсь выполнить SQL запрос, при выполнении метода Fill, почему-то выбивает ошибку:

286