2012-07-09 40 views
0

首先,我在尝试将Avalon Dock从1.3升级到2.0时面临此问题。 无论如何,我有一个ViewModel的集合,它使用数据模板,并将每个ViewModel变成一个单独的选项卡。使用DataTemplates查看模型。

所以我有这样的事情。

<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

回答

1

通常的ViewModels和DataTemplate的通过数据类型属性连接

<DataTemplate DataType="{x:Type local:MyViewmodelForHost1}"> 
    <winForm:WindowsFormsHost Name="_host1" /> 
</DataTemplate/> 

我不知道你的脚本对象看起来怎么样,但如果我认为它会以性能主机1,主机2。

 <local:PanesTemplateSelector.ScenarioMainTemplate> 
      <DataTemplate > 
       <TabControl> 
        <TabItem Header="View1"> 
         <ContentPresenter Content="{Binding Host1}"/> 
         <TextBlock Text="{Binding SampleText}"/> 
        </TabItem> 
        <TabItem Header="View2"> 
         <ContentPresenter Content="{Binding Host2}"/> 
        </TabItem> 
       </TabControl> 
      </DataTemplate> 
     </local:PanesTemplateSelector.ScenarioMainTemplate> 

如果host1和2属于相同类型,则不起作用。也许你可以添加一些viewmodel代码到你的问题。

+0

我必须承认,我不知道avalondock和我的情况不是WPF templateselector因为我的建议取决于不同的视图模型类型。这是更容易btw :)也更容易实现mvvm时 – blindmeis 2012-07-10 05:52:31