如何使用 MVVM 为 WPF Dirkster AvalonDock(v4.60.1) 手动设置可锚定视图 Floating/Hiding

How to set the Anchorable View Floating/Hiding Manually for WPF Dirkster AvalonDock(v4.60.1) with MVVM

我在我的 WPF 项目中使用带有 MVVM 模式的 Dirkster AvalonDock(v4.60.1)。 我想通过我的视图模型将 AnchorableView 状态更改为浮动或隐藏,但遗憾的是没有太多示例供我参考。

我的方法是在一个名为 LayoutInitializer 的 class 中控制视图状态,它处理 LayoutUpdateStrategy我的 AvalonDock。

这是我的 XAML Avalon Dock 代码:

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

通过上面的代码,XAML会自己创建LayoutInitializerclass,通过这个class可以控制 AvalonDock 元素(例如 LayoutRoot、LayoutAnchorable、Container 等)

下面是我的 LayoutInitializer class 设置 AnchorableView 状态(浮动或隐藏)的代码:

public void AfterInsertAnchorable(LayoutRoot layout, LayoutAnchorable anchorableShown)
    {
        anchorableShown.FloatingHeight = 300;
        anchorableShown.FloatingWidth = 400;
        anchorableShown.FloatingTop = 150;
        anchorableShown.FloatingLeft = 1000;
        anchorableShown.CanDockAsTabbedDocument = false;
        anchorableShown.CanMove = false;
        anchorableShown.CanAutoHide = true;
        anchorableShown.Float();
        //anchorableShown.Hide();
    }

它自己工作正常,但在某些情况下,我需要通过我的 ViewModel[ 手动将 AnchorableView 状态更改为 Float/Hide =68=].

我试图从我的 ViewModel 创建 LayoutInitializer class 的另一个新实例,但是这个新创建的 LayoutInitializer class无法访问AvalonDock Elements,也会导致重复class LayoutInitializer.

So, How should I set the AnchorableView state from my ViewModel manually?

Q2.

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

我可以想出另一种方法来尝试,即为 LayoutInitializer 绑定一个 属性 到 XAML 代码。

而不是调用

helper:LayoutInitializer/

我可以在我的 ViewModel 中使用 XAML 代码 绑定 LayoutInitializer 的 属性,通过这个方法 ViewModel 可以共享同一个对象 LayoutInitializer class 和我的 ViewModel 也可以更改 AnchorableView 状态 (float/hide)!

But How can I bind the LayoutInitializer from my ViewModel to the XAML code (avalonDock:DockingManager.LayoutUpdateStrategy)?

#一个简单的问题:是否有人仍在使用 AvalonDock for WPF,或者是否有其他 Nuget 库用于停靠视图?

这是一个相当复杂的问题,如果我的问题让你感到困惑,抱歉。 但我真的需要你们的帮助!提前致谢!

下面是绑定 ViewModel 中的 LayoutInitializerView。使用此方法,您可以访问 AvalonDock Elements,您可以自由更改 layout 文档layout 的状态anchorable 甚至可以访问 LayoutInitializer class.

中的 layout root