AvalonDock 2.0 中的内容绑定

Content Binding in AvalonDock 2.0

我正在尝试将我的一些旧 AvalonDock 概念分配给 AD 2.0。我注意到 DocumentContentLayoutDocument 取代了。通过访问 LayoutDocumentPane 表单,可以很容易地通过 .Children.add() 添加。但是,新表单的创建是在我的应用程序中线程化的(InitializeComponents 需要一段时间),并且将文档添加到对接系统是通过调用执行的。这会导致 InvalidOperation,我猜它无法修复,因为它是 WPF。我希望通过使用绑定来处理这个问题。从我的 AD1 代码开始,我意识到所有属性都在 Content object 中。将 Content. 添加到绑定源将使我的文档 header 看起来像由模板定义的。在这里查看我的 XAML:

<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 添加一些新表单,header 是正确的,但未显示 window 内容。而不是打印 window 的 class 名称。我认为它类似于 header 并且缺少对 .Content 的一些引用,并且我在更高级别上看到 object 的一些 .ToString() 结果。如何判断Content赋值给window内容?

如果我的方法有误,请告诉我。

我认为您需要向 DockingManager 添加一些 resources 以显示对应于 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>