我目前正在編寫一個應用程序,複合方法適合像手套....幾乎!WPF:複合應用程序與頁面導航
我還需要一種在視圖之間導航的方式,包括維護用於向後和向前導航的日記。
什麼是這兩種方法及其衍生UserControl
合併的意見,一方面單Window
基於CAG外殼的最佳方式,而在另一方面,方便NavigationWindow
外殼,其Page
得出的觀點和雜誌?
謝謝!
我目前正在編寫一個應用程序,複合方法適合像手套....幾乎!WPF:複合應用程序與頁面導航
我還需要一種在視圖之間導航的方式,包括維護用於向後和向前導航的日記。
什麼是這兩種方法及其衍生UserControl
合併的意見,一方面單Window
基於CAG外殼的最佳方式,而在另一方面,方便NavigationWindow
外殼,其Page
得出的觀點和雜誌?
謝謝!
您可以在NavigationWindow
中顯示任何內容,而不僅僅是Pages
。使其工作的一種簡單方法是在NavigationWindow
的資源中定義一個DataTemplate
,用於您要顯示的每個ViewModel。該NavigationWindow
的Content
屬性綁定到你的主視圖模型的屬性,你就大功告成了:改變該屬性將更新NavigationWindow
內容,並適當DataTemplate
都會被自動
UPDATE
我只看了一個我使用NavigationWindow
的項目的代碼。其實我錯了,它通過綁定Content
不起作用(或者它可行,但那不是我所做的)。相反,我創建了一個INavigationService
界面,由我的App
類實現,該類通過調用NavigationWindow.Navigate
方法處理導航。這樣,導航歷史由NavigationWindow
維護。
下面是我的項目的提取
MainWindow.xaml:
<NavigationWindow x:Class="MyApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:MyApp.ViewModel"
xmlns:view="clr-namespace:MyApp.View"
Title="{Binding Content.DisplayName, RelativeSource={RelativeSource Self}, FallbackValue=The Title}"
Height="600" Width="800">
<NavigationWindow.Resources>
<DataTemplate DataType="{x:Type vm:HomeViewModel}">
<view:HomeView />
</DataTemplate>
<DataTemplate DataType="{x:Type vm:CustomerViewModel}">
<view:CustomerView />
</DataTemplate>
</NavigationWindow.Resources>
</NavigationWindow>
App.xaml.cs:
...
private void Application_Startup(object sender, StartupEventArgs e)
{
LoadConfig();
MyApp.MainWindow window = new MainWindow();
INavigationService navigationService = this;
HomeViewModel viewModel = new HomeViewModel(navigationService);
this.MainWindow = window;
window.Navigate(viewModel);
window.Show();
}
當我需要導航到另一個視圖,我只是將ViewModel作爲參數調用Navigate
方法,WPF autom從資源中挑選合適的DataTemplate
。
這是一個不錯的和簡單的解決方案,但對我的口味來說有點過於簡單。我有它的問題:日記,查看生存期管理,查看狀態,導航歷史中的多個視圖,'PageFunction'功能(能夠以模態方式調用視圖)。 或者,也許我不完全瞭解你的解決方案,你能詳細說一點嗎? – 2010-01-19 20:52:37
另一個值得關注的問題是能否以相對獨立的方式開發視圖(與shell解耦)。基本上,你說我根本不應該使用CAG,而是使用一種解決方法來使常規的'NavigationWindow'感覺像CAG。但後來我失去了CAG提供的優勢,模塊的動態加載,獨立模塊開發等。 – 2010-01-19 21:20:43
感謝Thomas的額外細節,但我仍然不高興。你所說的是'創建一個常規的導航應用程序,並自己實現CAG部件' - 這意味着我需要提供一個統一容器,動態加載模塊,爲視圖動態創建數據模板等。我寧願換個角度來說,使用CAG並實現導航並記錄下自己。+1至少讓我看到我**不想**想要做的事情:-) – 2010-01-19 21:54:38