まず、Avalon Dockを1.3から2.0にアップグレードしようとすると、この問題に直面します。とにかく、私はViewModelのコレクションを持っています。これは、データテンプレートを使用し、各ViewModelを個別のタブに変換します。
だから私はこのようなものを持っています。
<ad:DockingManager x:Name="_dockingManager" DocumentsSource="{Binding Scenarios}">
<ad:DockingManager.LayoutItemTemplateSelector>
<local:PanesTemplateSelector>
<local:PanesTemplateSelector.ScenarioMainTemplate>
<DataTemplate >
<TabControl>
<TabItem Header="View1">
<winForm:WindowsFormsHost Name="_host1" />
<TextBlock Text="{Binding SampleText}"/>
</TabItem>
<TabItem Header="View2">
<winForm:WindowsFormsHost Name="_host2" />
</TabItem>
</TabControl>
</DataTemplate>
</local:PanesTemplateSelector.ScenarioMainTemplate>
</local:PanesTemplateSelector>
</ad:DockingManager.LayoutItemTemplateSelector>
<ad:LayoutRoot>
<ad:LayoutPanel Orientation="Vertical" >
<ad:LayoutDocumentPane/>
</ad:LayoutPanel>
</ad:LayoutRoot>
</ad:DockingManager>
したがって、上記の処理は、ドキュメントソースにバインドされたシナリオごとに、で新しいドキュメントを作成します<ad:LayoutDocumentPane/>
。
バインディングは機能しますが、ViewModel側でwinFormHostの子を設定する必要があります。そして、ビューモデルでそれを行う方法がわかりません。ただし、SampleTextのバインディングは機能します。
ビューモデルで_host1コントロールを取得して設定する必要があります。
私には、これを行うことは正しく/適切なMVVMではないように思われます。これは、ビューモデルのビューで遊んでいるように感じるためです。
これを行うための代替手段はありますか、それともこの試みは大丈夫ですか(もしそうなら、どうすればいいですか?)
ありがとう、Kev84