2015-07-20 139 views
1

我在我的WPF项目中使用了众所周知的对接库AvalonDock 2.0。该库支持MVVM,这就是我想要做的。示例MVVM测试应用程序可在GitHub上获得。我下载了样品,并扩展它来显示我需要的布局,这大致是这样的:AvalonDock:多个工具窗口布局

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

正如你所看到的,我有一个主文件区和具有3和LayoutAnchorable S中的一个工具区停靠在右侧并垂直堆放。使用MVVM,我的窗口的ViewModel公开一个名为Tools的属性,该属性返回一个包含我所有工具窗口的ViewModel的数组。然后将该属性绑定到XAML中我的对接控件的AnchorablesSource属性。

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

有没有人在这里使用MVVM的AvalonDock?我在这里前进的方式是什么? LayoutInitializer班级在解决这个问题上有什么作用?

+0

您是否尝试过使用并在此所有LayoutAnchorable中。 –

+0

@ N.J:是的。我已经做到了,那确实有效。然而,问题是我需要这样做MVVM方式,即方向/布局应该由VM属性决定,而不是静态设计时XAML。 'AnchorablesSource'和'DocumentsSource'是两个很好的例子,让我们将布局绑定到VM属性,而不是在设计时在XAML中定义它们。 – dotNET

+0

@dotNET,“布局”实际上是“视图”,所以在xaml中定义这个属性或者在代码隐藏中做这个属性是没有问题的。相反,您的视图模型不得管理任何呈现方面,例如视图布局。 – dymanoid

回答

1

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

+0

谢谢你的提示! – Bennik2000