• 手把手玩转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的,当选择的时候,程序也会得到了通知。

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

  • 相关阅读:
    C#控制键盘大小写切换
    C#表示空字符
    正则表达式30分钟入门教程[转自deerchao]
    学习deercao的正则笔记
    c# winform 全角自动转化半角问题(C#中ImeMode的值)
    C# 键盘中的按键对应的KeyValue
    这个Replace可以忽略大小写
    Keys枚举
    反射总结
    C# 中 KeyPress 、KeyDown 和KeyPress的详细区别[转]
  • 原文地址:https://www.cnblogs.com/manuosex/p/2797547.html
Copyright © 2020-2023  润新知