2011-09-22 39 views
2

假設您希望允許用戶重新設置包含兩列的WPF/SL Grid。但是你也希望允許用戶隱藏一列(「面板」)或另一列。當顯示兩欄(面板)時,還應顯示GridSplitter;否則不。您還希望使用MVVM式的綁定,而不使用代碼隱藏。也許你想在會話之間堅持設置。您的視圖模型這些屬性:如何使用WPF/SL Grid和GridSplitter作爲可綁定的SplitContainer?

布爾IsPanelOneVisible

布爾IsPanelTwoVisible

GridLength SplitPosition

那麼如何才能只使用綁定我這樣組裝起來?

請注意,當用戶拖動GridSplitter時,網格列的寬度(通過綁定或Auto設置)會被覆蓋。

沒有任何我已閱讀的帖子(其中還包括一些SplitContainer實現)解決了這種情況。人們可以使用代碼隱藏(對事件作出響應)或視圖模型上的其他屬性進行連線。但我希望有一個更優雅的解決方案。

任何想法?謝謝!

回答

1

我們遇到了同樣的問題,綁定解決方案非常混亂,我們將創建一個用戶控件來完成上述所有操作(分離器和切換窗格的開/關)。

問題是,第一列大小從像素大小(由分離器調整大小)變爲自動大小並再次返回。分離器的可見性也可能會根據您希望如何工作而發生變化。

一旦你創建一個用戶控件做很多你就不用擔心MVVM在裏面(代碼背後,是不是邪惡的用戶控件,只有在應用程序級別),並只擔心暴露MVVM友好特性如IsPanelOneVisible等。