У меня есть приложение на основе модулей, где каждый модуль (DLL) содержит один основной UserControl. Модули загружаются только тогда, когда это необходимо, и его UserControls добавляются в MainWindow. В главном окне используется AvalanDock [2.0] для стыковки модулей UserControls. До сих пор я делаю это так:Добавить динамически загруженные UserControls в AvalanDock MVVM способ
public void DockUserControl(UserControl userControl){
var documentPane = dockingManager.Layout.Descendents().OfType<LayoutDocumentPane>().FirstOrDefault();
if (documentPane != null)
var layoutDocument = new LayoutDocument { Content = userControl };
documentPane.Children.Add(layoutDocument);
documentPane.SelectedContentIndex = documentPane.Children.IndexOf(layoutDocument);
}
Эта модель очень ограничивает, например, я хотел бы связать титул layoutDocument к ViewModel в виде UserControl, ручка закрытия события и т.д .. Поэтому Я хотел бы использовать шаблон MVVM. Типичное использование выглядит следующим образом:
<avalonDock:DockingManager x:Name="dockManager"
DocumentsSource="{Binding UserControls}">
<avalonDock:DockingManager.LayoutItemTemplateSelector>
...
</avalonDock:DockingManager.LayoutItemTemplateSelector>
<avalonDock:DockingManager.LayoutItemContainerStyleSelector>
...
</avalonDock:DockingManager.LayoutItemContainerStyleSelector>
...
Однако, есть много модулей и главное окно должно только знать, что они имеют общий предок. Поэтому я не могу перечислить все UserControls в LayoutItemTemplateSelector. У меня есть список UserControls.
Есть ли у вас какие-либо идеи, как использовать MVVM с динамически загружаемыми UserControls?
Я думаю, что существует следующая проблема: AvalanDock выбирает View на основе ViewModel. Поэтому, если я использую общий ViewModel для всех моих UserControls, тогда AvalanDoock не сможет решить, какой вид он должен выбрать. Более конкретно я вижу проблему в той части, где вы используете. Или, может быть, мне нужен еще один намек. –
Dejvovo
Возможно, у вас может быть общий вид, а затем добавить в него свой пользовательский элемент управления, например, iframe или что-то в этом роде. – ganchito55