這裏的主要問題是如何以MVVM友好的方式顯示搜索彈出窗口。我在我的github帳戶上有一個example專用於此目的的自定義控件(完整的源代碼可供下載)。
的控制可以被用於這樣的:
<c:ModalContentPresenter IsModal="{Binding DialogIsVisible}">
<!-- This is the main content e.g. your maintenance screen -->
<TabControl Margin="5">
<Button Margin="55"
Padding="10"
Command="{Binding ShowModalContentCommand}">
This is the primary Content
</Button>
</TabItem>
</TabControl>
<c:ModalContentPresenter.ModalContent>
<!-- This is the modal content e.g. your search popup -->
<Button Margin="75"
Padding="50"
Command="{Binding HideModalContentCommand}">
This is the modal content
</Button>
</c:ModalContentPresenter.ModalContent>
</c:ModalContentPresenter>
模態內容直接顯示在主內容(在你的情況下通過維持屏幕)和它的可見性被控制由IsModal
屬性可以是結合到viewModel中的一個屬性。該屬性將通過搜索命令設置爲true,並且您的搜索網格將顯示在維護屏幕前面。
您的搜索屏幕「視圖」會有一個關閉按鈕,該按鈕綁定到另一個ICommand對象,該對象將該屬性設置爲false並隱藏彈出內容。
請注意,由於主要模式內容和模式內容都由相同的控件管理,因此它們共享相同的DataContext
,在您的情況下,它們將是對viewModel的引用,因此不需要「傳遞」任何信息。
實際上是把一段代碼,在後面的代碼不會打破這種模式。 MVVM的關鍵點是可以單元測試視圖邏輯(viewmodel)而不存在veiw。 – ktutnik 2012-07-09 10:27:31