手把手玩轉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的,當選擇的時候,程序也會得到了通知。

 

這節議程差不多了,如下日程繼續吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM