我试图将一些旧的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
已分配给窗口内容?
如果我的方法有一些谬误请告诉我。
谢谢。你可以请解释或显示一个例子什么是'ViewModels:AdvancedSearchViewModel'和'Views'在这里? (我对WPF来说比较新) – z3e
如果'LayoutDocument'没有'DataContext',这是如何工作的? – z3e
好的,如果不存在,你不想添加'DataContext'。我猜你正在为你的文档使用'UserControls'作为不同的视图,并且每个'UserControl'都与一个'ViewModel'关联。如果是这种情况,那么创建你的'ViewModel'实例并添加到'Documents'集合中就行了。 –