【问题标题】:AvalonDock: Multiple tool windows layoutAvalonDock:多工具窗口布局
【发布时间】:2015-10-09 08:03:31
【问题描述】:

我在我的 WPF 项目中使用著名的停靠库 AvalonDock 2.0。该库支持 MVVM,这就是我想要做的。 GitHub 上提供了示例 MVVM 测试应用程序。我下载了示例并扩展它以显示我需要的布局,大致如下所示:

---------------------------
|                    |    |
|                    | T1 |
|                    |----|
|      Docs          |    |
|                    | T2 |
|                    |----|
|                    |    |
|                    | T3 |
---------------------------

如您所见,我有一个主文档区域和一个工具区域,其中包含 3 个停靠在右侧并垂直堆叠的 LayoutAnchorables。使用 MVVM,我的窗口的 ViewModel 公开了一个名为 Tools 的属性,该属性返回一个包含我所有工具窗口的 ViewModel 的数组。然后,我将此属性绑定到 XAML 中停靠控件的 AnchorablesSource 属性。

但问题是 AvalonDock 将 3 个工具窗格显示为 3 个选项卡,而不是垂直堆叠它们。

这里有人用过 AvalonDock 和 MVVM 吗?我在这里的前进方向是什么? LayoutInitializer 类在解决这个问题上有什么作用吗?

【问题讨论】:

  • 你尝试过使用 并在这里面所有你的 LayoutAnchorable。
  • @N.J:是的。我已经做到了,并且确实有效。然而问题是我需要以 MVVM 方式来做,即方向/布局应该由 VM 属性决定,而不是静态设计时 XAML。 AnchorablesSourceDocumentsSource 是两个很好的例子,它们让我们将布局绑定到 VM 属性,而不是在设计时在 XAML 中定义它们。
  • @dotNET,“布局”实际上是“视图”,因此在 xaml 中定义此属性甚至在代码隐藏中执行此属性是错误的。相反,您的视图模型不得管理任何表示方面,例如视图布局。
  • @dymanoid:你有一个有效的观点。这就是我最终的结果。

标签: c# wpf xaml mvvm avalondock


【解决方案1】:

后来的研究表明,将 ViewModel 对象分配给我的LayoutAnchorablePanes 实际上是LayoutInitializer 类的工作。布局本身仍应在 XAML 中定义(如果您愿意,也可以通过代码隐藏)。从理论的角度来看,这也是正确的; ViewModel 不应该负责管理布局(视图)。

【讨论】:

  • 感谢您的提示!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-17
  • 1970-01-01
  • 2013-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多