2015-08-24 47 views
1

我试图将一些旧的AvalonDock概念分配给AD 2.0。我注意到DocumentContent被替换为LayoutDocument。通过访问LayoutDocumentPane表格可以通过.Children.add()轻松添加。但是,新窗体的创建在我的应用程序中进行了线程化处理(InitializeComponents需要一段时间),并且向对接系统添加文档由调用执行。这导致一个InvalidOperation,我想它不能被修复,因为它是WPF。我希望通过使用绑定来处理这个问题。从我的AD1代码开始,我意识到所有属性都在Content对象中。将Content.添加到绑定源将使我的文档头看起来像模板定义的。看到这里我的XAML:AvalonDock 2.0中的内容绑定

<AD:DockingManager Name="dockManager" DocumentsSource="{Binding Documents}" > 
    <AD:DockingManager.DocumentHeaderTemplate> 
     <DataTemplate> 
     <StackPanel Orientation="Horizontal"> 
      <Image Source="{Binding Content.IconSource}" /> 
      <TextBlock Text="{Binding Content.Title}" /> 
     </StackPanel> 
     </DataTemplate> 
    </AD:DockingManager.DocumentHeaderTemplate> 
    <AD:LayoutRoot PropertyChanged="OnLayoutRootPropertyChanged"> 
     <AD:LayoutPanel Orientation="Horizontal" > 
      <AD:LayoutDocumentPaneGroup> 
       <AD:LayoutDocumentPane> 
       </AD:LayoutDocumentPane> 
      </AD:LayoutDocumentPaneGroup> 
      <AD:LayoutAnchorablePaneGroup DockWidth="300"> 
       <AD:LayoutAnchorablePane x:Name="rightPanel"> 
       </AD:LayoutAnchorablePane> 
      </AD:LayoutAnchorablePaneGroup> 
     </AD:LayoutPanel> 
    </AD:LayoutRoot> 
</AD:DockingManager> 

文档定义:

public ObservableCollection<LayoutDocument> Documents { get; private set; } 

如果我现在添加一些新的形式Documents标题是正确的,但不显示窗口内容。而不是打印窗口的类名称。我认为它与标题相似,并且缺少一些对.Content的引用,我在高层看到了一些.ToString()对象的结果。如何确定Content已分配给窗口内容?

如果我的方法有一些谬误请告诉我。

回答

2

我想你需要一些resources添加到您的DockingManager显示您查看对应ViewModel Instance

<AD:DockingManager.Resources> 
    <DataTemplate DataType="{x:Type ViewModels:ViewModel1}">// your ViewModel Name comes here. 
       <Views:View1 DataContext="{Binding}" /> // your View Comes here. DataContext is not required if you specify it on the UserControl.  
    </DataTemplate> 
<DataTemplate DataType="{x:Type ViewModels:ViewModel2}"> 
       <Views:View2 DataContext="{Binding}" />  
    </DataTemplate> 
</AD:DockingManager.Resources> 

和你Documents collection应该有ViewModel实例

基于下面的评论编辑

<AD:DockingManager> 
    <AD:LayoutRoot> 
     <AD:LayoutPanel Orientation="Vertical"> 
       <AD:LayoutDocumentPaneGroup> 
        <AD:LayoutDocumentPane> 
         <!--Your View/UserControl goes here--> 
        </AD:LayoutDocumentPane> 
        <AD:LayoutDocumentPane> 
         <!--Your View/UserControl goes here--> 
        </AD:LayoutDocumentPane> 
       </AD:LayoutDocumentPaneGroup> 
      </AD:LayoutPanel> 
     </AD:LayoutRoot> 
    </AD:DockingManager> 
+0

谢谢。你可以请解释或显示一个例子什么是'ViewModels:AdvancedSearchViewModel'和'Views'在这里? (我对WPF来说比较新) – z3e

+0

如果'LayoutDocument'没有'DataContext',这是如何工作的? – z3e

+0

好的,如果不存在,你不想添加'DataContext'。我猜你正在为你的文档使用'UserControls'作为不同的视图,并且每个'UserControl'都与一个'ViewModel'关联。如果是这种情况,那么创建你的'ViewModel'实例并添加到'Documents'集合中就行了。 –