演示如何在MVVM应用程序中使用Avalondock的示例代码

本文关键字:Avalondock 代码 应用程序 MVVM | 更新日期: 2023-09-27 18:01:21

我试图在我的wpf应用程序中使用AvalonDock,这是一个MVVM应用程序。环顾四周,我找不到任何示例应用程序来显示如何做到这一点。

AlavonDock说它原生支持MVVM,所以支持MVVM应该很容易,但是没有样例代码。

我的问题是:

  1. 如何编写xaml,有一个文档管理器,它被绑定到视图模型?
  2. 在这种情况下如何向面板添加新文档?
  3. 如何从documentmanegr中获取布局信息(如果可能的话)。

演示如何在MVVM应用程序中使用Avalondock的示例代码

在AvalonDock的CodePlex源代码中有一个示例应用程序-它不包括在正常下载中。你需要进入源代码控制页面,点击"下载"。

另外,我写了一个示例应用程序,你也可以使用它来开始,我写了一篇快速的博客文章来描述它,并把它放在GitHub上。

基本上,你可以设置LayoutItemContainerStyle来架起View和ViewModel之间的桥梁,例如:

<Window ...
  xmlns:dock="http://schemas.xceed.com/wpf/xaml/avalondock"
  xmlns:dockctrl="clr-namespace:Xceed.Wpf.AvalonDock.Controls;assembly=Xceed.Wpf.AvalonDock"
  >
  ...
  <dock:DockingManager DataContext="{Binding DockManagerViewModel}"
                       DocumentsSource="{Binding Documents}" >
    <dock:DockingManager.LayoutItemContainerStyle>
      <!-- you can add additional bindings from the layoutitem to the DockWindowViewModel -->
      <Style TargetType="{x:Type dockctrl:LayoutItem}">
        <Setter Property="Title" Value="{Binding Model.Title}" />
        <Setter Property="CloseCommand" Value="{Binding Model.CloseCommand}" />
        <Setter Property="CanClose" Value="{Binding Model.CanClose}" />
      </Style>
    </dock:DockingManager.LayoutItemContainerStyle>
  </dock:DockingManager>
</Window>

在这个例子中,DockManagerViewModel有一个属性'Documents',它是一个viewmodel的集合,这些viewmodel有一个Title, CloseCommand和CanClose属性。