В настоящее время я столкнулся с очень странной проблемой. Я использую AvalonDock (встроенный в последний WPF Extended Toolkit 3) в приложении WPF с Caliburn.Micro.Авалон, вызывающий сбой при закрытии документа
В моей MainView.xml У меня есть этот DockingManager:
<xcad:DockingManager x:Name="dockMngr"
Grid.Row="1"
AllowMixedOrientation="True"
DataContext="{Binding DockingManagerVM}"
DocumentsSource="{Binding Documents}"
AnchorablesSource="{Binding Anchorables}"
ActiveContent="{Binding CurrentDocument, Mode=TwoWay}"
cal:Message.Attach="[Event DocumentClosed] = [Action DocumentClosed($eventArgs)];
[Event DocumentClosing] = [Action DocumentClosing($eventArgs)]">
В конструкторе DockingManagerVM.cs я создаю некоторые документы по умолчанию будет отображаться:
Documents = new ObservableCollection<GenericDocumentViewModel>();
Documents.Add(new MyDocumentViewModel());
Documents.Add(new MyDocumentViewModel());
Documents.Add(new MyDocumentViewModel());
CurrentDocument = _documents[0];
Очевидно Я определил «сопоставление» между MyDocumentViewModel и представлением, которое будет отображаться как документ в XAML:
<xcad:DockingManager.Resources>
<DataTemplate DataType="{x:Type vm:MyDocumentViewModel}" >
<local:MyDocumentView />
</DataTemplate>
</xcad:DockingManager.Resources>
По какой-то причине, когда я пытаюсь закрыть документ, что я не сделал активным раньше (нажав на вкладке соответствующей) сбои приложений с этим сообщением:
An unhandled exception of type 'System.NullReferenceException' occurred in WindowsBase.dll
Additional information: Object reference not set to an instance of an object.
К сожалению никаких подробностей не предоставляется из Visual Studio (если у вас есть идея, как их получить, это будет здорово).
Ниже приведены шаги, которые я пытался воспроизвести (или нет) вопрос:
Запустить приложение; есть 3 документа, первый из них активен и показан, а затем:
- Закройте второй или третий документ, щелкнув «X» на элементе управления вкладкой; приложение аварийные сообщения
- Открываю второй документ (без закрытия первого); Затем я могу закрыть как первый, так и второй документ, но если я попытаюсь закрыть последний (с тех пор, как я его не открыл), то приложение аварийно завершает работу
- Закройте первый документ, затем второй документ будет помечен как активен и показан. Я закрываю этот текущий документ, отображается третий документ, и я могу закрыть его. No crash.
- Я открываю все документы, нажимая на меню вкладки, один за другим; то я могу закрыть каждый документ в любом порядке без сбоев.
- Щелкните правой кнопкой мыши элемент управления вкладкой и нажмите «Закрыть все документы» (эта функция предоставляется AvalonDock): все документы закрываются без какого-либо сбоя.
Не могли бы вы рассказать мне, если вы заметили что-то не так в том, что я делаю, или если есть способ отладить AvalonDock, чтобы выяснить, что происходит?
спасибо!