我注意到许多WPF MVVM框架似乎避免使用NavigationWindow和Page控件来支持使用嵌套UserControls组合页面。
NavigationWindow和Page提供了在日志中启用后退和前进导航的简便方法,并提供了在页面之间传递数据的简便方法。我见过的大多数MVVM框架都以各种方式重新实现这些功能。
是否有特定原因要避免使用NavigationWindow和Page?
答案 0 :(得分:10)
“NavigationWindow不存储 中的内容对象的实例 导航历史。代替, NavigationWindow创建一个新的 每个内容对象的实例 它通过使用导航到的时间 导航历史。这种行为是 旨在避免过多的记忆 大数量消费时 正在发布大量内容 导航到。因此,国家 内容的记忆不会被记住 一个导航到下一个。然而, WPF提供了几种技术 你可以存储一个州 用于导航中的一段内容 历史....“
http://msdn.microsoft.com/en-us/library/system.windows.navigation.navigationwindow.aspx
答案 1 :(得分:3)
我刚发现UserControls和Pages之间的另一个区别:Pages不能用作DataTemplates。
例如,如果您使用MVVM样式创建应用程序,您可能希望这样做:
<DataTemplate DataType="{x:Type ViewModels:ProjectDashboardViewModel}">
<Views:ProjectDashboardView />
</DataTemplate>
但是如果ProjectDashboardView是一个页面,它将会失败。
答案 2 :(得分:2)
我刚刚在Paul Stovell的网站上找到了一些与WPF NavigationWindow和Page相关的有趣信息。
他对NavigationWindow类有这个说法:
WPF包含一个名为NavigationWindow的类,它实际上是一个Window,它也可以通过实现大多数相同的接口而兼作Frame。一开始听起来很有用,但大多数时候你需要对Window进行更多控制,所以我从来没有必要使用这个类。我只是为了完整起见而指出它,尽管你的里程可能会有所不同。
在撰写他的Magellan WPF框架时,请参阅他在WPF Navigation和Magellan and WPF Page management issues上遇到的深入文章。
答案 3 :(得分:1)
好吧,你仍然会使用usercontrols创建可重用的子组件,但对于app架构,它真的归结为用例。如果您正在构建典型的Web应用程序,那么Business / Navigation App应该没问题。如果你正在写游戏,那就不是了。同样,如果您正在做类似互动广告或媒体播放器的事情。