如何在 ViewModel 中创建 AvalonDock LayoutInitializer 并将其绑定到 XAML 代码?

How to create AvalonDock LayoutInitializer in ViewModel and bind it to the XAML code?

我正在使用具有 MVVM 模式的 Dirkster AvalonDock(v4.60.1)。

Avalon Dock 通常设置 LayoutUpdateStrategy 如下:(在 XAML)

<avalonDock:DockingManager.LayoutUpdateStrategy>
    <helper:LayoutInitializer/>
</avalonDock:DockingManager.LayoutUpdateStrategy>

但是,我需要通过我的 ViewModel 手动将可锚定视图更改为 Float/Hide,因此我认为可以完成的方法是在我的 ViewModel 中创建 LayoutInitializer class 并将其绑定到XAML 以便我的 ViewModel 访问 AvalonDock 元素(例如 LayoutRoot、LayoutAnchorable、Container 等)。

如何在我的 ViewModel 中创建 LayoutInitializer class 并将其绑定到 XAML 中的 <avalonDock:DockingManager.LayoutUpdateStrategy>

整个星期都在用头撞墙,忘记尝试最简单的绑定方法

感谢@雷洋提醒(评论区):

因为我可以在 ViewModel 上创建 helper:LayoutInitializer,所以显然我可以绑定整个 DockingManager.LayoutUpdateStrategy 到创建 helper:LayoutInitializer class.

而不是编写 XAML 代码来创建 helper:LayoutInitializer class:

<avalonDock:DockingManager.LayoutUpdateStrategy>
    <helper:LayoutInitializer/>
</avalonDock:DockingManager.LayoutUpdateStrategy>

我可以将它绑定到 Docking Manager,

<avalonDock:DockingManager x:Name="dockManager"
                                   AnchorablesSource="{Binding TVm}"
                                   DocumentsSource="{Binding CVM}"
                                   ActiveContent="{Binding ActiveDocument, Mode=TwoWay, Converter={StaticResource ActiveDocumentConverter}}"
                                   Background="WhiteSmoke"
                                   LayoutUpdateStrategy="{Binding ADLayoutStrategy}">...

上面的代码很神奇,你可以看到 avalonDock:DockingManager 的最后一行。我将 LayoutUpdateStrategy 绑定到我的 ViewModel 的 属性 并且 属性 指向我的 helper:LayoutInitializer class.

LayoutInitializer ADLayoutStrategy = new LayoutInitializer();

现在,ViewModel 可以访问 UIElement 并更改 document/anchorable 视图状态!

我不知道还有没有人在使用 AvalonDock,但希望对您有所帮助!