c# - AvalonDock 2.0 中的内容绑定(bind)

标签 c# wpf avalondock

我正在尝试将一些旧的 AvalonDock 概念分配给 AD 2.0。我注意到 DocumentContentLayoutDocument 替换。通过访问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/

相关文章:

c# - DataGridView-如何跳转到搜索中选中的行?

CSS 与 Horizo​​ntalAlignment = Stretch of WPF 相似的属性?

wpf - RestSharp - 在 WPF/Silverlight 中下载/使用图像

WPF TreeView : WordWrap

c# - AvalonDock - 如何禁止拉出窗口的 float 元素

c# - 调试时在 Visual Studio 中的 C# 应用程序和 C 控制台应用程序之间传递数据

c# - 使用 C# 在 WPF 中更改背景图像

c# - AvalonDock : When using DocumentPane binding, 新 DocumentContent 项目的选项卡不可单击

c# - 当你对物体的边缘施加力时会发生什么?

c# - AvalonDock 绑定(bind)在 DocumentHeaderTemplate 中不起作用