我正在尝试将一些旧的 AvalonDock 概念分配给 AD 2.0。我注意到 DocumentContent
被 LayoutDocument
替换。通过访问LayoutDocumentPane
,可以通过.Children.add()
轻松添加表单。但是,新表单的创建是在我的应用程序中进行线程化的(InitializeComponents
需要一段时间),并且向对接系统添加文档是通过调用执行的。这会导致 InvalidOperation,我猜它无法修复,因为它是 WPF。我希望通过使用 Bindings 来解决这个问题。从我的 AD1 代码开始,我意识到所有属性都在 Content
对象中。将 Content.
添加到绑定(bind)源将使我的文档标题看起来像由模板定义的。请在此处查看我的 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
分配给窗口内容?
如果我的方法有任何谬误,请告诉我。
最佳答案
我认为您需要向您的 DockingManager
添加一些资源
,以显示与 ViewModel 实例
对应的 View ,
<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 集合
应该具有 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>
关于c# - AvalonDock 2.0 中的内容绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32184187/