AvalonDock 2.0 中的内容绑定
Content Binding in AvalonDock 2.0
我正在尝试将我的一些旧 AvalonDock 概念分配给 AD 2.0。我注意到 DocumentContent
被 LayoutDocument
取代了。通过访问 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>
我正在尝试将我的一些旧 AvalonDock 概念分配给 AD 2.0。我注意到 DocumentContent
被 LayoutDocument
取代了。通过访问 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>