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

简介:

这节,我们继续上节的一个议程。

①添加一个主页

现在我已经定义了一个ViewModel,我就开始整合项目。第一步就是添加主页到添加到项目中去。我明白项目为何吧页面创建为空白页面,但这个空白的页面起名字叫空白一点儿意义都没有吧,我这里需要给新页面起一个更有意义的页面.原先的空白页面,我已经吧他干掉了。

鄙人是个贱体,我更喜欢添加一些新的文件夹,使其更加的有层次。因此,我加了一个新的文件夹加做pages。在此文件夹下,我右击我添加了一个叫做list的xaml的文件、

特别提醒,如果你是xaml的一个新手的话,就非常的总要先理解我在手把手玩转win8开发系列课程(5),(6)讲的那个空白项目的例子。你要明白,在xaml的文件支持迭代的风格来定义控件,并且添加了一些源代码来支持他。并支持用一些样式的定义来减少一定重复的定义。这更加的自愿,就源代码就出现在这里。当然了,我也很难只在文章中讲述纯的xaml语言。

对于程序,我想做这么一件事,当app加载的时候就加载这个listPage页面,这怎么办了,我需要在app.xaml的源文件中做一定更改。怎么更改的啊!源代码如下:


 1 using Windows.ApplicationModel;
 2 using Windows.ApplicationModel.Activation;
 3 using Windows.UI.Xaml;
 4 using Windows.UI.Xaml.Controls;
 5 namespace MetroGrocer {
 6   sealed partial class App : Application {
 7   //构造函数 控件的初始化  
 8   public App() {
 9      //初始化相应的控件
10       this.InitializeComponent();
11       this.Suspending += OnSuspending;
12     }
13     //开始加载时间
14     protected override void OnLaunched(LaunchActivatedEventArgs args) {
15       if (args.PreviousExecutionState == ApplicationExecutionState.Terminated) {
16         //TODO: Load state from previously suspended application
17       }
18       // Create a Frame to act navigation context and navigate to the first page
19       var rootFrame = new Frame();
20 //首先导航到listPage这个页面    rootFrame.Navigate(typeof(Pages.ListPage));
21       // Place the frame in the current Window and ensure that it is active
22       Window.Current.Content = rootFrame;
23       Window.Current.Activate();
24     }
25     void OnSuspending(object sender, SuspendingEventArgs e) {
26       //TODO: Save application state and stop any background activity
27     }
28   }
29 }

此时不明白这个类的意思,你也不用慌。在第五章的时候,我会这个类如何对整个生命周期的响应给你们做详细的阐述。

②开始编码了

最明了的原因解释是我为何创建这个项目与你平时创建的项目不同。就是我对listpage.xaml。cs进行了编码。相应的源代码如下:


 1 using MetroGrocer.Data;
 2 using Windows.UI.Xaml.Controls;
 3 using Windows.UI.Xaml.Navigation;
 4 namespace MetroGrocer.Pages {
 5   public sealed partial class ListPage : Page {
 6     //viewmodel 的对象
 7 ViewModel viewModel;
 8   //构造函数
 9   public ListPage() {
10        //viewmodel的实例
11       viewModel = new ViewModel();
12      //添加数据
13       viewModel.StoreList.Add("Whole Foods");
14       viewModel.StoreList.Add("Kroger");
15       viewModel.StoreList.Add("Costco");
16       viewModel.StoreList.Add("Walmart");
17       viewModel.GroceryList.Add(new GroceryItem { Name = "Apples",
18         Quantity = 4, Store = "Whole Foods" });
19       viewModel.GroceryList.Add(new GroceryItem { Name = "Hotdogs",
20         Quantity = 12, Store = "Costco" });
21       viewModel.GroceryList.Add(new GroceryItem { Name = "Soda",
22         Quantity = 2, Store = "Costco" });
23       viewModel.GroceryList.Add(new GroceryItem { Name = "Eggs",
24         Quantity = 12, Store = "Kroger" });
25            this.InitializeComponent();
26    this.DataContext = viewModel;
27     }
28 //导航的事件
29     protected override void OnNavigatedTo(NavigationEventArgs e) {
30     }
31 //改变的索引
32    private void ListSelectionChanged(object sender, SelectionChangedEventArgs e) {
33       viewModel.SelectedItemIndex = groceryList.SelectedIndex;
34     }
35     }
36 }

构造函数创建了一个新的viewmodel实例,处理许多简单的数据。这个处理了许多数据。在类中最激动人心声明如下:

this.DataContext = viewModel;示内容在用户界面控件的视图模型。为此,我开始指定数据源。用户控件的DataContext属性是给一个用户界面控件及其所有子控件指定源数据绑定。我使用关键字对其数据进行了绑定。为什么能够这么做了,因为listpage包含所对应的所有对应的xaml的源代码。

我在最后部分定义的方法是用于处理SelectionChanged事件了。这是一种控件是用来显示项目的购物清单.当我定义xaml的时候,我会让这个方法被调用时,返回用户选择其中的一个项。依据SelectedItem属性,方法中的在viewmodel设置的selectedItem这个属性、由于这个属性是Observable的,当选择的时候,程序也会得到了通知。

 

这节议程差不多了,如下日程继续吧。


目录
相关文章
|
10天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1210 5
|
9天前
|
机器学习/深度学习 人工智能 前端开发
通义DeepResearch全面开源!同步分享可落地的高阶Agent构建方法论
通义研究团队开源发布通义 DeepResearch —— 首个在性能上可与 OpenAI DeepResearch 相媲美、并在多项权威基准测试中取得领先表现的全开源 Web Agent。
1172 87
|
9天前
|
云栖大会
阿里云云栖大会2025年9月24日开启,免费申请大会门票,速度领取~
2025云栖大会将于9月24-26日举行,官网免费预约畅享票,审核后短信通知,持证件入场
1767 12
|
19天前
|
人工智能 运维 安全
|
2天前
|
资源调度
除了nrm-pm,还有哪些工具可以管理多个包管理器的源?
除了nrm-pm,还有哪些工具可以管理多个包管理器的源?
230 127
|
10天前
|
弹性计算 Kubernetes jenkins
如何在 ECS/EKS 集群中有效使用 Jenkins
本文探讨了如何将 Jenkins 与 AWS ECS 和 EKS 集群集成,以构建高效、灵活且具备自动扩缩容能力的 CI/CD 流水线,提升软件交付效率并优化资源成本。
362 0

热门文章

最新文章