サンプルプログラムの概要

このサンプルプログラムは、http://www.odata.org/odata-services/のOData(read/write)で定義されているPersonエンティティを読み込んでNameプロパティを編集するサンプルプログラムです。以下のような動作をします。

起動直後は、何も表示されません。

アプリバーに表示されている読み込みボタンを選択すると、データが読み込まれて表示されます。

読み込まれたデータを選択するとNameプロパティの編集用画面に遷移します。

データを編集して、アプリバーの保存ボタンを選択すると、データがサーバーに反映されMainPageに遷移します。

サンプルプログラムの実行方法

ソリューションのNuGetパッケージの復元を有効化してリビルドしてから実行してください。

サンプルプログラムの解説

サンプルプログラムのポイントとなる箇所を説明します。

ODataのクライアントの生成

Models/OData/ODataClient.ttファイルでODataのクライアントを生成しています。これはVisualStudioの拡張機能と更新プログラムから入手できるOData v4のクライアントを生成するファイルになります。

ViewModelとModelのマッピング

Models/AppContextクラスが、このアプリケーションのModelのルート要素になります。このクラスのインスタンスをViewModel間で共有することでアプリケーション全体で状態の共有を行っています。ViewModel間で共有している方法は、AppクラスのOnInitializeAsyncメソッドに書いてあります。コードを以下に示します。

 

C#
スクリプトの編集|Remove
protected override Task OnInitializeAsync(IActivatedEventArgs args) 
{ 
    // VとVMとMのマッピング 
    var model = new AppContext(); 
    ViewModelLocationProvider.Register( 
        typeof(MainPage).FullName, 
        () => new MainPageViewModel(model, this.NavigationService)); 
    ViewModelLocationProvider.Register( 
        typeof(EditPage).FullName, 
        () => new EditPageViewModel(model, this.NavigationService)); 
    return Task.FromResult<object>(null); 
}
 

 

ListViewでの項目の選択時にCommandを実行する方法

MainPageで、ListViewのアイテムを選択したときに、コマンドを実行できるように独自のBehaviorを定義しています。Behaviorは、Commons/ItemClickToCommandBehaviorです。ListViewBaseクラスのItemClickイベントを購読して、選択されたアイテムを引数としてCommandプロパティに設定されたCommandを実行しています。

MainPageとEditPage間の選択項目の受け渡し

MainPageのListViewでアイテムが選択されたときに、EditPageに画面遷移を行っています。画面遷移のときに選択されたPersonのIDを渡しています。EditPageでは、受け取ったIDを使って編集対象のPersonを探しています。画面遷移のパラメータを使っている理由は、中断からの復帰処理で、画面遷移のパラメータを受け取ったところから処理を再開できるためです。こうしておくと、中断からの復帰時も、普通の画面遷移時も、ほぼ同じ処理で対応できるためです。