В нашем главном окне мы используем 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>
, в которое мы добавляем и удаляем модели представления. Это хорошо работает.
Однако, когда пользователь решает создать новую горизонтальную или вертикальную группу, это изначально работает: выбранный документ действительно переносится в новую группу и продолжает функционировать. Но когда пользователь затем пытается добавить новый документ, две группы исчезают, и появляется новая группа, которая показывает новый документ дважды. После этого привязка данных, конечно, разваливается.
Это выглядит так (стиль показывает документы как элементы вкладок):
Два документа в одной группе:
После применения вертикального разбиения:
После добавления новой модели представления в коллекцию документов:
Как видите, две исходные группы документов исчезли, и была создана новая группа, в которой новый документ отображается дважды. Управляющая модель представления просто имеет свойства ActiveDocument
и Documents
, поэтому она не знает, что документы были разделены на две группы. Аналогично, элемент управления AvalanDock не может знать, в какой из двух групп документов он должен показать новый документ!
Очевидно, что в привязке данных отсутствуют некоторые функции, но какие?
Как обновить xaml правильно справиться с этой ситуацией?