Подходящая точка для присоединения события NodeChanged, XAML - PullRequest
1 голос
/ 27 июня 2011

У меня есть пользовательский контроль WPF в форме заявки winforms.

По сути, я хочу, чтобы общий обработчик событий, прикрепленный к моему WPF TreeView, обрабатывал «Document.NodeChanged». Поскольку это конкретное событие срабатывает при заполнении дерева, я попытался выполнить позднее присоединение через событие Loaded моего элемента управления treeview.

Код выглядит примерно так:

private void UpdateGrid()
{
    myGridView.UpdateXML(entityId, runDate, rtbToggleFullView.ToggleState == Telerik.WinControls.Enumerations.ToggleState.Off, userName);
    //Safely attach the event to fire when the treeview has finished loading.
    myGridView.tvRatings.Loaded -= AttachNodeChangedEvent;
    myGridView.tvRatings.Loaded += AttachNodeChangedEvent;
}

Тогда метод AttachNodeChangedEvent выглядит следующим образом:

public void AttachNodeChangedEvent(object i, EventArgs a)
{
    ((XmlDataProvider)myGridView.dataProvider).Document.NodeChanged -= OnNodeChanged;
    ((XmlDataProvider)myGridView.dataProvider).Document.NodeChanged += OnNodeChanged;
}

С помощью простого метода OnNodeChanged:

public void OnNodeChanged(object i, EventArgs a)
{
  Dirty = true;
}

Идея такова: -

  1. UpdateGrid запускает UpdatesXML для дерева
  2. Присоединяет «атташе NodeChangeHandler» к дереву. Загруженный
  3. (когда загружено древовидное представление) древовидное представление запускает "Attach NodeChangeHandler", которое затем присоединяет "OnNodeChanged" к заполненному древовидному представлению XmlDocumentProvider.

Похоже, что это прекрасно работает в Windows 7. В Windows XP, однако, запускается процедура AttachNodeChangedEvent, и возникает исключение NullReferenceException (предположительно, потому что Документ еще не загружен?), Вызывающее сбой приложения.

Комментирование строк ... ((XmlDataProvider) myGridView ... исправляет сбой, но, очевидно, отключает функциональность.

Может кто-нибудь предложить лучший способ достижения того же или пролить свет на то, почему это работает для Windows 7, но не для Windows XP? «Например, присоединить NodeChangedEvent после первоначального заполнения Treeview»

Я могу подтвердить, что оба используют соответствующий пакет .Net Framework 4 и, похоже, все остальные зависимости включены соответствующим образом.

Спасибо!

...