我目前正在编写一个应用程序,复合方法适合像手套....几乎!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