2013-03-12 122 views
2

我做了一個基於用戶交互打開連續窗口的WPF應用程序。例如,第一個winodw詢問用戶想要處理什麼模塊,當做出選擇並按下按鈕時,打開一個新窗口,顯示一些供應商和摘要計數。選擇其中一個供應商並按「編輯」按鈕打開另一個窗口,其中顯示該供應商的詳細信息。點擊一個細節,然後點擊一個按鈕打開另一個窗口,用戶可以在其中更改一些數字等。然後用戶關閉該窗口,選擇不同的項目並編輯,或關閉該窗口並選擇不同的供應商等。每個窗口都有自己的窗口目前查看模型。我想擺脫所有的窗口層。選項卡控制似乎不是一個好的選擇,因爲用戶將不得不通過正確的序列等。什麼是最好的方法來改變這隻使用一個窗口,並換出用戶在一個窗口中看到的當他,例如,按下按鈕編輯等?轉換我的多窗口WPF應用程序到一個窗口?

+1

這是另一個StackExchange網站一個很好的問題:用戶體驗(http://ux.stackexchange.com/users/13161/ ) – 2013-03-12 14:24:53

+0

這是一個很好的解決方案,使一個主容器,然後瀏覽您的窗口或不?如果是這樣,你可以嘗試使用'UserControl',它允許你導航。 – Sonhja 2013-03-12 14:39:58

+0

任何人都可以告訴我,如果一個框架頁面或用戶控件將是合適的。可能是一個例子?謝謝 – 2013-03-12 14:40:16

回答

3

我個人更喜歡使用<ContentControl />我的內容區域,並根據用戶當前的「窗口」

我有an example on my blog你可以看看那個,但基本組成部分看起來像換出活動內容這樣的:

視圖模型:

ObservableCollection<IViewModel> AvailableScreens; 
IViewModel ActiveScreen; 

ICommand SetActiveScreenCommand; 

有了一些XAML看起來像這樣:

<ContentControl Content="{Binding ActiveScreen}" /> 

而且我通常使用DataTemplates告訴WPF如何繪製每個視圖模型

<Window.Resources> 
    <DataTemplate DataType="{x:Type local:ModulesViewModel}"> 
     <local:ModulesView /> 
    </DataTemplate> 

    <DataTemplate DataType="{x:Type local:VendorsViewModel}"> 
     <local:VendorView /> 
    </DataTemplate> 

    <DataTemplate DataType="{x:Type local:EditVendorViewModel}"> 
     <local:EditVendorView /> 
    </DataTemplate> 
</Window.Resources> 
+0

謝謝蕾切爾我會嘗試這個,這似乎基本上是我想要做的 – 2013-03-12 16:03:33

+0

Rachel-你有什麼技巧可以讓ChangePageCommand可用於每個UserControl中的按鈕嗎?我的情況是我的DockPanel中的按鈕不像您的博客中的示例,我需要在UserCOntrols中擁有按鈕才能更改ContentControl的內容。因此,而不是一個綁定到DataContext.ChangePageCommand,RelativeSource = {RelativeSource AncestoryType = {x:Type Window}}}的按鈕我可以在每個UserControl中調用ChangePageCommand? – 2013-03-13 12:37:26

+0

@ user1029770如果您無法在ViewModel圖層中找到構建命令的方法(例如「ParentViewModel」設置爲「ChildViewModel」。ChangePageCommand'),然後我通常使用某種類型的消息系統,如PRISM的'EventAggregator'或MVVM Light的'Messenger'。如果您有興趣,我可以在我的博客上簡要介紹一下[郵件系統概述](http://rachel53461.wordpress.com/2011/06/05/communication-between-viewmodels-with-mvvm/)。基本上你的主ViewModel會訂閱接收'ChangePageEvents',你可以從程序中的任何地方廣播一個'ChangePageEvent' – Rachel 2013-03-13 12:40:24

0

您可以使用模擬Visual Studio行爲的對接框架,如AvalonDock

+0

無論如何,它不是關於可停靠窗口的主題(問題),他可以使用分隔符,樹視圖和上下文編輯器(例如VS選項窗口)來實現它(例如)。沒有什麼可以在那裏停靠... – 2013-03-12 14:27:07

+0

好的,有沒有任何如何做到這一點的例子? – 2013-03-12 14:30:51

+0

我問了那個User Experience stackechange網站上的問題,它立即被投票表決,所以... – 2013-03-12 14:42:39