NavigationWindow数据流

时间:2011-01-26 19:14:28

标签: wpf wpf-controls

我现在正在编写我的第一个wpf应用程序。

我想在用户选择的每个页面上使用NavigationWindow,并且所有数据都应在下一页上提供,我有大约6页。

我应该如何处理所有数据?通过构造函数?或者在WPF中有一些更聪明的方法。

在最后一页上,将有很多数据来自前几页。

2 个答案:

答案 0 :(得分:0)

我会从两种方式中解决这个问题:代码隐藏方式(简单,但难以扩展,也会变得非常混乱),以及MVVM方式(需要一些学习,分离关注点,易于扩展,管理)。

在代码隐藏的方式中,我只有一个Tab控件,其标签标题按照您想要的方式设置(您可以将它们设置为几乎任何您想要的样式)。在代码隐藏中,您可以使用一些逻辑来指定X Tab未启用或可见,直到满足Y条件。

有一种更好的方法,但它带有一点学习曲线,即MVVM设计模式。您将有6个Page对象,它们实际上只是定义页面内容的CLR对象(例如,如果它是一个问卷,您的页面对象将包含问题对象和标题对象)。

您可以拥有几个视图,导航视图和页面视图。 NavigationView将绑定到NavigationViewModel,后者具有更改页面所需的逻辑。 PageView将绑定到6个PageViewModel中的一个,并且可以根据NavigationViews逻辑更改PageViews DataContext(提供该绑定)。

答案 1 :(得分:0)

Night Walker,

很难从你的解释中弄清楚你想要做什么。首先,NavigationWindow是你的应用程序的框架,我想你知道这一点,但我只是想确保我们理解我们没有创建NavigationWindow的新实例。我认为你的意思是“页面”。页面是导航窗口的内容,表示您希望在NavigationWindow提供的ContentPresenter中显示的某个目标。

我再次不确定您是如何使用“路径数据”这一短语的。通常,您可以直接在项目中或在卫星项目中创建页面,然后使用包URI引用它们。可以在此处找到有关如何构造包URI的示例。

http://msdn.microsoft.com/en-us/library/aa970069(v=vs.85).aspx

然后,您可以使用如下表达式导航到包URL:

 this.Navigate(new Uri("pack://application:,,,/MyAssembly;component/MyPage.xaml", UriKind.Absolute);

如果您不想参与导航框架的所有细节,只想专注于您的用户的应用程序,您可以查看我放置的NavigationControl的专业版本一起:

http://www.teraque.com/products/explorer-chrome-suite/

There's an free demo you can download.  If this is was you are looking to do I can give you pointers if you don't want to purchase the package directly.

此致

唐纳德罗伊艾瑞

donald.roy.airey@teraque.com