【发布时间】: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。
AnchorablesSource和DocumentsSource是两个很好的例子,它们让我们将布局绑定到 VM 属性,而不是在设计时在 XAML 中定义它们。 -
@dotNET,“布局”实际上是“视图”,因此在 xaml 中定义此属性甚至在代码隐藏中执行此属性是错误的。相反,您的视图模型不得管理任何表示方面,例如视图布局。
-
@dymanoid:你有一个有效的观点。这就是我最终的结果。
标签: c# wpf xaml mvvm avalondock