手把手玩转win8开发系列课程(12)

上节,说到怎么插入相应的页面。这节,真真正正来插入页面看看。

插入页面

很显然,只定义一个ItemDetail页面是远远不够的。为了完成这项用户选择某项来展示不同信息的功能,我需要写许多的代码。下面就展示了我所写的源代码:

1 using System;
 2 using MetroGrocer.Data;
 3 using Windows.UI.Xaml;
 4 using Windows.UI.Xaml.Controls;
 5 using Windows.UI.Xaml.Navigation;
 6 namespace MetroGrocer.Pages {
 7   public sealed partial class ItemDetail : Page {
 8    //viewModel的定义
 9     private viewModel;
10     //进行初始化的方法
11     public ItemDetail() {
12       this.InitializeComponent();
13     }
14       //上节 说过通过了OnNavigatedTo的参数来传递这样的对象
15     protected override void OnNavigatedTo(NavigationEventArgs e) {
16       viewModel = e.Parameter as ViewModel;
17       this.DataContext = viewModel;
18        //属性改变来做出了各种各样不同改变的事件了
19       viewModel.PropertyChanged += (sender, eventArgs) => {
20         if (eventArgs.PropertyName == "SelectedItemIndex") {
21           if (viewModel.SelectedItemIndex == -1) {
22             SetItemDetail(null);
23           } else {
24             SetItemDetail(viewModel.GroceryList
25               [viewModel.SelectedItemIndex]);
26           }
27         }
28       };
29
30       SetItemDetail(viewModel.GroceryList
31         [viewModel.SelectedItemIndex]);
32     }
33 //设置每项具体值的方法
34 private void SetItemDetail(GroceryItem item) {
35       ItemDetailName.Text = (item == null) ? "" : item.Name;
36       ItemDetailQuantity.Text = (item == null) ? ""
37         : item.Quantity.ToString();
38       if (item != null) {
39         ItemDetailStore.SelectedItem = item.Store;
40       } else {
41         ItemDetailStore.SelectedIndex = -1;
42       }
43     }
44     private void HandleItemChange(object sender, RoutedEventArgs e) {
45       if (viewModel.SelectedItemIndex > -1) {
46         GroceryItem selectedItem = viewModel.GroceryList
47           [viewModel.SelectedItemIndex];
48         if (sender == ItemDetailName) {
49           selectedItem.Name = ItemDetailName.Text;
50         } else if (sender == ItemDetailQuantity) {
51           int intVal;
52           bool parsed = Int32.TryParse(ItemDetailQuantity.Text,
53             out intVal);
54           if (parsed) {
55             selectedItem.Quantity = intVal;
56           }
57         } else if (sender == ItemDetailStore) {
58           string store = (String)((ComboBox)sender).SelectedItem;
59           //对齐赋值
60          if (store != null) {
61             viewModel.GroceryList
62               [viewModel.SelectedItemIndex].Store = store;
63           }
64         }
65    }
66     }
67   }
68 }

这段代码运行结果怎么样了,如图所示:

下面,我就SetItemDetail方法与HandleItemChange方法来重点的讨论一下。

这个SetItemDetail方法的作用是展示了你选择每个选择的食物列表当中某项的具体信息,而HandleItemChange的方法就是当用户选择改变的时候做出相应的方法。

SetItemDetail方法是这样子做。根据传递的GroceryItem的对象,在将其Name、Quantity与Store各个属性赋值给某个控件。

HandleItemChange方法是这样子处理的,将其viewmodel的对象,又进行了一个重新的赋值。

这个类,最有意思,也是作用最大的一个方法,就是OnNavigatedTo方法。因此,我着重表示出来了,他是时候被调用了,当ItemDetail这个页面,显示出来的。我上文也提到过在这种方法中,我传递了一个viewmodel对象。这个对象在PropertyChanged事件中有重要的作用了。的了,他最终效果,就如上图所示。

你瞧,哟,通过这么传递对象,我确保的所有的页面能够得到同样的数据了。这个也是我能把整个程序拆分的前提。

这样,一个页面插入了其他的页面了,并且保持了相应的数据保持同步。

时间: 2024-08-31 09:23:27

手把手玩转win8开发系列课程(12)的相关文章

手把手玩转win8开发系列课程(23)

这节,我们来讨论①像程序中添加最复杂的flyout控件②创建包装类 (1)像程序中添加最复杂的flyout控件 手把手玩转win8开发系列课程(21)的时候了,我们已经把一个简单的FlyOut的文件添加到了项目中,我们觉得还不够,因此了,上节我们创建了一个复杂的控件.于是,我们来将其添加到项目中去,下列是添加这个控件的源码: 1 <!--flyouts 命名空间 指向MetroGrocer.Flyouts--> 2 <flyouts:HomeZipCodeFlyout x:Name=&q

手把手玩转win8开发系列课程(8)

这节,我们继续上节的一个议程. ①添加一个主页 现在我已经定义了一个ViewModel,我就开始整合项目.第一步就是添加主页到添加到项目中去.我明白项目为何吧页面创建为空白页面,但这个空白的页面起名字叫空白一点儿意义都没有吧,我这里需要给新页面起一个更有意义的页面.原先的空白页面,我已经吧他干掉了. 鄙人是个贱体,我更喜欢添加一些新的文件夹,使其更加的有层次.因此,我加了一个新的文件夹加做pages.在此文件夹下,我右击我添加了一个叫做list的xaml的文件. 特别提醒,如果你是xaml的一个

手把手玩转win8开发系列课程(5)

  前面第三节,我们对ui层大一统的技术--xaml技术有了一个概览.   这节中的我们正式以一个项目--食品管理程序从头到尾的开发的过程,来真真正正手把手进行win8开发.别看这是简简单单的项目,麻雀虽小,能够学win8的开发的方方面面--数据的绑定,各种各样的控件和xaml样式的引用等等.   在下图1,你会看到这个项目最终运行的效果(在模拟器中运行的). 项目的开篇介绍. 针对项目,首先,可以肯定告诉大家我写的这个项目的内容是针对程序猿们而不是对于这些设计妹妹,而且这个食品管理器不是一个完

手把手玩转win8开发系列课程(1)

win8操作系统推出一个多月了,我做win8开发也有2个多月了,也写了不少wi8开发的游戏开发的博文(这一系列我会继续的更新),在这里我准备重新推出一套win8的手把手的教程,来帮助更多人,走入win8开发的阵营. 这里我们做好一些win8前期的工作,安装win8及其对win8进行一些介绍.   Win8是由微软公司开发的,具有革命性变化的操作系统.该系统旨在让人们的日常电脑操作更加简单和快捷,主要是针对平板电脑等新一代的移动互联网操作系统,是为人们提供高效易行的工作环境Win8支持来自Inte

手把手玩转win8开发系列课程(2)

 对win8开发,上一节我们对win8进行了简单的介绍,这一节我们来瞧一瞧他的开发环境搭建.    前奏. 这里所讲的win8开发,主要是指Windows8 app store 上开发,及metro ui或叫morden ui 程序的开发.传统桌面应用程序,网站应用程序的win8开发和在win7,xp下一模一样,这里就不多做过多的赘述. 这里的开发运行环境必须是Windows8,开发工具可以用vs2012 express 版本,注意这里只能开发Windows8 app store的应用程序,下载

手把手玩转win8开发系列课程(6)

这节,揭秘工程继续. 揭秘 StandardStyles.xaml文件. common文件下所包括项目中要所使用各种各样的模板文件.如图所示: 别看这么多文件了,我这里关心StandardStyles.xaml文件,他有什么作用了,最明显的作用是这个文件包含了app.xaml中所引用的一些资源字典的数据.这些数据有究竟是什么了,我问你你看到的metro风格的窗体是哪儿规定,就是来自StandardStyles.xaml文件定义的各种各样的样式.你如果对xaml有所了解的话,一定对xaml中样式不

手把手玩转win8开发系列课程(28)

这节,我们讨论两个主题 ①打破视图 ②使用瓦片和徽章来更好的用户体验 如果你把断裂视图呈现给用户,你可以恢复到一个更广泛的布局时,与用户交互的应用在某些方面.为了证明这个道理,  我添加一个按钮到viewPage页面上.下列的源代码所示: 1 <StackPanel x:Name="TopRight" Background="#70a524" Grid.Column="1" 2 Grid.Row="0"> 3 &l

手把手玩转win8开发系列课程(27)

这节,我们讨论两个主题 ①打破视图 ②使用瓦片和徽章来更好的用户体验 如果你把断裂视图呈现给用户,你可以恢复到一个更广泛的布局时,与用户交互的应用在某些方面.为了证明这个道理,  我添加一个按钮到viewPage页面上.下列的源代码所示: 1 <StackPanel x:Name="TopRight" Background="#70a524" Grid.Column="1" 2 Grid.Row="0"> 3 &l

手把手玩转win8开发系列课程(3)

上节,我们已经搭建了他的开发环境,这节,我们对UI层大一统的技术--XAML技术进行一个概览. 先来搞清楚什么是XAML?所谓XAML是eXtensible Application Markup Language的英文缩写,相应的中文名称为可扩展应用程序标记语言,它是微软公司为构建应用程序用户界面而创建的一种新的描述性语言.  特别提醒,xaml中含有ML两个字,因此可以看出来他属于ML(mark Language)家族,这里有必要揭秘一下他的前世今生.      在xaml出现之前,微软技术的