繁体   English   中英

如何在 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>

整整一个星期都把头靠在墙上,我忘了尝试最简单的绑定方法。

感谢@Lei Yang,提醒我(在评论部分):

由于我可以在ViewModel上创建helper:LayoutInitializer ,那么显然我可以将整个DockingManager.LayoutUpdateStrategy绑定到创建的helper:LayoutInitializer class。

而不是编写 XAML 代码来创建该助手: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 的属性,并且该属性指向我的助手:LayoutInitializer class。

LayoutInitializer ADLayoutStrategy = new LayoutInitializer();

现在, ViewModel可以访问 UIElement 并更改文档/锚定视图状态!

我不知道是否还有人仍在使用 AvalonDock,但希望它有所帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM