У меня есть пользовательский контроль 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;
}
Идея такова: -
- UpdateGrid запускает UpdatesXML для дерева
- Присоединяет «атташе NodeChangeHandler» к дереву. Загруженный
- (когда загружено древовидное представление) древовидное представление запускает "Attach NodeChangeHandler", которое затем присоединяет "OnNodeChanged" к заполненному древовидному представлению XmlDocumentProvider.
Похоже, что это прекрасно работает в Windows 7. В Windows XP, однако, запускается процедура AttachNodeChangedEvent, и возникает исключение NullReferenceException (предположительно, потому что Документ еще не загружен?), Вызывающее сбой приложения.
Комментирование строк ... ((XmlDataProvider) myGridView ... исправляет сбой, но, очевидно, отключает функциональность.
Может кто-нибудь предложить лучший способ достижения того же или пролить свет на то, почему это работает для Windows 7, но не для Windows XP? «Например, присоединить NodeChangedEvent после первоначального заполнения Treeview»
Я могу подтвердить, что оба используют соответствующий пакет .Net Framework 4 и, похоже, все остальные зависимости включены соответствующим образом.
Спасибо!