モジュール(.dll)には1つのメインUserControlが含まれているモジュールベースのアプリケーションがあります。モジュールは、必要なときにロードされ、UserControlsがMainWindowに追加されます。 メインウィンドウはAvalanDock [2.0]を使用してモジュールのUserControlをドッキングしています。これまでのところ、私はそれをこのようにやっている:動的にロードされたUserControlを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のタイトルをバインドクロージングイベントなどを処理したいと思いますMVVMパターンを使用したいと思います。次のように一般的な使用方法が見えます:
<avalonDock:DockingManager x:Name="dockManager"
DocumentsSource="{Binding UserControls}">
<avalonDock:DockingManager.LayoutItemTemplateSelector>
...
</avalonDock:DockingManager.LayoutItemTemplateSelector>
<avalonDock:DockingManager.LayoutItemContainerStyleSelector>
...
</avalonDock:DockingManager.LayoutItemContainerStyleSelector>
...
しかし、多くのモジュールとメインウィンドウが、彼らはいくつかの共通の祖先を持っていることだけ知っている必要がありますがあります。したがって、私はすべてのUserControlをLayoutItemTemplateSelectorにリストすることはできません。私が持っているのは、UserControlsのリストです。
動的にロードされたUserControlでMVVMを使用する方法はありますか?私の場合は
私は、AvalanDockがViewModelに基づいてViewを選択するという問題があると思います。だから私がすべての私のUserControlsのために一般的なViewModelを使用する場合、AvalanDoockはどのViewを選択すべきかを決めることができません。より具体的には、を使用する部分で問題が発生します。あるいはもう一つのヒントが必要かもしれません。 –
Dejvovo
多分あなたは一般的なビューを持つことができますし、iframeやそのようなもののように、あなたのユーザーコントロールを置くことができます。 – ganchito55