2015-07-20 62 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