博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
手把手玩转win8开发系列课程(12)
阅读量:5889 次
发布时间:2019-06-19

本文共 2967 字,大约阅读时间需要 9 分钟。

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

插入页面

很显然,只定义一个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.GroceryList25               [viewModel.SelectedItemIndex]);26           }27         }28       };29     30       SetItemDetail(viewModel.GroceryList31         [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.GroceryList47           [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.GroceryList62               [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事件中有重要的作用了。的了,他最终效果,就如上图所示。

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

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

 

转载地址:http://xpysx.baihongyu.com/

你可能感兴趣的文章
mysql中的事务和锁_MySQL - 事务和锁中的互斥?
查看>>
mysql statement讲解_Statement接口详解
查看>>
mysql_print_default_知识点:MySQL常用工具介绍(十 二)——实用程序my_print_defaults、perror...
查看>>
mysql怎么会报错_MySQL启动报错怎么办?
查看>>
python编译exe用于别的电脑上_Python安装教程(推荐一款不错的Python编辑器)
查看>>
flash back mysql_mysqlbinlog flashback 使用最佳实践
查看>>
hive中如何把13位转化为时间_sqoop1 导入 hive parquet 表中 时间戳调整为日期
查看>>
mysql书外键_[转] mysql 外键(Foreign Key)的详解和实例
查看>>
mysql存储引擎模式_MySQL存储引擎
查看>>
python入门小游戏代码_【Python】Python代码实现“FlappyBird”小游戏
查看>>
云服务器怎么卸载mysql数据库_mysql 删除数据库脚本
查看>>
mysql 5.5.57互为主从_MYSQL 5.5.18 互为主从配置成功
查看>>
mysql5002_mysql新手进阶02
查看>>
python类 del_全面了解Python类的内置方法
查看>>
前后端传图片用base64好吗_前后端分离 前台传base64的图片 tp5.1.1进行处理
查看>>
java对象的排序_Java对象排序两种方法
查看>>
java jni 原理_使用JNI技术实现Java和C++的交互
查看>>
java 重写system.out_重写System.out.println(String x)方法
查看>>
Ubuntu 12.04安装
查看>>
mysql client命令行选项
查看>>