首先,我在尝试将 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