前言:
上一篇文章"使用UWP 設計 MVVM 軟體架構(一) " , 我們以電影清單程式, 簡單地表示MVVM的架構及實作方法, 程式中View會把所有的電影資訊顯示在螢幕上, 但若現在我們想要再加一個功能, 讓使用者點擊ListBox上的Item(Movie)時, 頁面能夠導向另一個View去顯示詳細的電影資訊, 那我們該如何實作?以下就是說明, 如何使用NavigationService來幫助我們去切換每個View元件, 基本上有幾個步驟
- 修改App.cs
- 建立ViewModel, MovieDetailViewModel
- 建立View, MovieDetailView
- 修改MovieDetailView
- 修改MovieListViewModel
- 修改MovieListView
前置作業
在開始動工之前我們先在Common的資料夾裡加入以下的類別- INavigationService.cs
- NavigationService.cs
- NavigationHelper.cs
- SuspensionManager.cs
修改App.xaml.cs
- 我們在這邊宣告NavigationService的靜態變數方便將來使用
建立MovieDetailViewModel
- 為了簡化範例, 基本上這個ViewModel沒什麼特別功能, 單純就是開放Movie的Model讓View做Data Binding而已
- 將MovieDetailViewModel的實體加到ViewModelLocator裡
建立MovieDetailView
- 這邊我們建立一個全新的View Page顯示電影名稱, 電影價錢
- 修改MovieDetailView.xaml.cs 處理頁面轉換
- 實作NavigationHelper.LoadState事件, 處理當頁面被載入時的動作, 讓MovieListView傳過來的Model能設定給MovieDetailViewModel
修改MovieListViewModel
- 加入一個新的方法, 提供ListBox 上點擊Item時的事件處理邏輯
- 主要是去呼叫NavigationService做頁面切換
修改MovieListView.xaml.cs
- 建立ListBox的SelectionChanged 的事件處理方法ListBox_SelectionChanged
- 我們會在這方法的實作內去呼叫原本綁定的MovieListViewModel 的 selectedMovieChanged()方法
- 以NavigationHelper來處理頁面轉換
- 實作當頁面被導航至此頁時的事件 public void navigationHelper_LoadState(object sender, LoadStateEventArgs e)
- 目的是當頁面被導航至MovieListView時, 先將 SelectedMovie的直給清掉
修改MovieListView.xaml
- 在ListBox 的標籤內註冊SelectionChanged 的事件處理方法
留言
張貼留言