AvalonDock 2.0中的内容绑定

时间:2015-08-24 13:58:44

标签: c# wpf avalondock

我试图将一些旧的AvalonDock概念分配给AD 2.0。我注意到DocumentContent已被LayoutDocument取代。访问LayoutDocumentPane表单可以通过.Children.add()轻松添加。但是,在我的应用程序中创建新表单(InitializeComponents需要一段时间),并且通过调用执行向对接系统添加文档。这会导致InvalidOperation,我想它无法修复,因为它是WPF。我希望通过使用Bindings来处理这个问题。从我的AD1代码开始,我意识到所有属性都在Content对象中。将Content.添加到绑定源将使我的文档标题看起来像模板定义。在这里查看我的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添加一些新表单,则标题正确但窗口内容未显示。而不是这样,打印窗口的类名。我认为它类似于标题,并且缺少对.Content的一些引用,我在较高级别上看到了对象的一些.ToString()结果。如何确定Content已分配给窗口内容?

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

1 个答案:

答案 0 :(得分: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>