我做了一個基於用戶交互打開連續窗口的WPF應用程序。例如,第一個winodw詢問用戶想要處理什麼模塊,當做出選擇並按下按鈕時,打開一個新窗口,顯示一些供應商和摘要計數。選擇其中一個供應商並按「編輯」按鈕打開另一個窗口,其中顯示該供應商的詳細信息。點擊一個細節,然後點擊一個按鈕打開另一個窗口,用戶可以在其中更改一些數字等。然後用戶關閉該窗口,選擇不同的項目並編輯,或關閉該窗口並選擇不同的供應商等。每個窗口都有自己的窗口目前查看模型。我想擺脫所有的窗口層。選項卡控制似乎不是一個好的選擇,因爲用戶將不得不通過正確的序列等。什麼是最好的方法來改變這隻使用一個窗口,並換出用戶在一個窗口中看到的當他,例如,按下按鈕編輯等?轉換我的多窗口WPF應用程序到一個窗口?
回答
我個人更喜歡使用<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>
謝謝蕾切爾我會嘗試這個,這似乎基本上是我想要做的 – 2013-03-12 16:03:33
Rachel-你有什麼技巧可以讓ChangePageCommand可用於每個UserControl中的按鈕嗎?我的情況是我的DockPanel中的按鈕不像您的博客中的示例,我需要在UserCOntrols中擁有按鈕才能更改ContentControl的內容。因此,而不是一個綁定到DataContext.ChangePageCommand,RelativeSource = {RelativeSource AncestoryType = {x:Type Window}}}的按鈕我可以在每個UserControl中調用ChangePageCommand? – 2013-03-13 12:37:26
@ 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
您可以使用模擬Visual Studio行爲的對接框架,如AvalonDock。
無論如何,它不是關於可停靠窗口的主題(問題),他可以使用分隔符,樹視圖和上下文編輯器(例如VS選項窗口)來實現它(例如)。沒有什麼可以在那裏停靠... – 2013-03-12 14:27:07
好的,有沒有任何如何做到這一點的例子? – 2013-03-12 14:30:51
我問了那個User Experience stackechange網站上的問題,它立即被投票表決,所以... – 2013-03-12 14:42:39
- 1. 轉換窗口桌面應用程序到窗口服務
- 2. addChild我的窗口到其他應用程序的窗口
- 3. 多窗口應用程序
- 4. 如何在一個WPF應用程序中有多個窗口?
- 5. 將WPF窗口附加到另一個進程的窗口
- 6. WPF如何設計一個多窗口應用程序?
- 7. WPF C#應用程序我得到2個主窗口
- 8. Facebook應用程序在窗口中顯示一個窗口
- 9. 如何在多窗口WPF應用程序中切換ViewModels?
- 10. z-order應用程序窗口 - WPF
- 11. 在應用程序中的多個WPF彈出窗口
- 12. 在另一個wpf窗口內部有一個wpf窗口
- 13. 合併多個窗口,一個窗口
- 14. 多窗口程序
- 15. 看不到我的第一個窗口應用程序
- 16. 兩個窗口在一個WPF應用程序
- 17. WPF覆蓋多個窗口
- 18. 從C#中的另一個應用程序顯示WPF窗口#
- 19. 在一個窗口中的WPF應用程序
- 20. 在一個窗口中的WPF應用程序
- 21. 另一個WPF窗口前面的WPF窗口
- 22. 響應WPF窗口
- 23. 強制窗口交換應用程序
- 24. WPF鏡像應用程序到兩個窗口?
- 25. C#窗口應用程序
- 26. 應用程序窗口
- 27. 如何在wpf多線程應用程序中訪問窗口
- 28. 觸發事件從另一個WPF窗口WPF窗口
- 29. 多窗口mac應用程序
- 30. Java FX多窗口應用程序
這是另一個StackExchange網站一個很好的問題:用戶體驗(http://ux.stackexchange.com/users/13161/ ) – 2013-03-12 14:24:53
這是一個很好的解決方案,使一個主容器,然後瀏覽您的窗口或不?如果是這樣,你可以嘗試使用'UserControl',它允許你導航。 – Sonhja 2013-03-12 14:39:58
任何人都可以告訴我,如果一個框架頁面或用戶控件將是合適的。可能是一個例子?謝謝 – 2013-03-12 14:40:16