Как отслеживать несколько групп документов в AvalonDock? - PullRequest
0 голосов
/ 02 февраля 2020

В нашем главном окне мы используем AvalonDock XCeed, таким образом:

 <xcad:DockingManager x:Name="dockManager" 
                         Margin="4,4,7,0"
                         Background="Transparent"
                         ActiveContent="{Binding ActiveDocument, Mode=TwoWay, Converter={StaticResource ActiveDocumentConverter}}"
                         DocumentsSource="{Binding Documents}">

В основной модели представления для главного окна у нас есть свойство Documents типа ObservableCollection<DocumentViewModel>, в которое мы добавляем и удаляем модели представления. Это хорошо работает.

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

Это выглядит так (стиль показывает документы как элементы вкладок):

Два документа в одной группе:

Two documents in one group

После применения вертикального разбиения:

After applying a vertical split

После добавления новой модели представления в коллекцию документов:

After adding a new document viewmodel to the Documents collection

Как видите, две исходные группы документов исчезли, и была создана новая группа, в которой новый документ отображается дважды. Управляющая модель представления просто имеет свойства ActiveDocument и Documents, поэтому она не знает, что документы были разделены на две группы. Аналогично, элемент управления AvalanDock не может знать, в какой из двух групп документов он должен показать новый документ!

Очевидно, что в привязке данных отсутствуют некоторые функции, но какие?

Как обновить xaml правильно справиться с этой ситуацией?

...