我试图将一些旧的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
已分配给窗口内容?
如果我的方法中有一些谬误请告诉我。
答案 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>