Prism for Windows Runtimeを使ったODataの更新アプリサンプル

サンプルプログラムの概要このサンプルプログラムは、http://www.odata.org/odata-services/のOData(read/write)で定義されているPersonエンティティを読み込んでNameプロパティを編集するサンプルプログラムです。以下のような動作をします。起動直後は、何も表示されません。アプリバーに表示されている読み込みボタンを選択すると、データが読み込まれて表示されます。読み込まれたデータを選択するとNameプロパティの編集用画面に遷移します。データを編集して、アプリバーの保存ボタンを選択すると、データがサーバーに反映さ

C# (114.3 KB)
 
 
 
 
 
(0)
36 times
Add to favorites
10/10/2014
E-mail Twitter del.icio.us Digg Facebook
using Microsoft.OData.Client;
using Microsoft.Practices.Prism.Mvvm;
using ODataReadWriteSampleApp.Models.OData;
using System.Collections.ObjectModel;
using System.Linq;
using System.Threading.Tasks;

namespace ODataReadWriteSampleApp.Models
{
    /// <summary>
    /// Person関連のModel
    /// </summary>
    public class PeopleModel : BindableBase
    {
        /// <summary>
        /// ODataへ接続するためのサービス
        /// </summary>
        private DemoService service;

        private ObservableCollection<Person> people;

        /// <summary>
        /// 読み込んだデータ
        /// </summary>
        public ObservableCollection<Person> People
        {
            get { return this.people; }
            set { this.SetProperty(ref this.people, value); }
        }

        private Person editTarget;

        /// <summary>
        /// 編集対象
        /// </summary>
        public Person EditTarget
        {
            get { return this.editTarget; }
            set { this.SetProperty(ref this.editTarget, value); }
        }

        /// <summary>
        /// サービスを使ってModelのインスタンスを作成
        /// </summary>
        /// <param name="service"></param>
        public PeopleModel(DemoService service)
        {
            this.service = service;
        }

        /// <summary>
        /// ODataのサービスからデータを読み込む
        /// </summary>
        /// <returns></returns>
        public async Task LoadPeopleAsync()
        {
            var results = await this.service.Persons
                .Expand(x => x.PersonDetail)
                .ExecuteAsync();
            this.People = new ObservableCollection<Person>(results);
        }

        /// <summary>
        /// 指定したIDのPersonを編集対象に設定する
        /// </summary>
        /// <param name="id"></param>
        public void SetEditTarget(int id)
        {
            this.EditTarget = this.People.First(x => x.ID == id);
        }

        /// <summary>
        /// 編集対象の変更内容をサーバーに反映する
        /// </summary>
        /// <returns></returns>
        public async Task SaveEditTargetChangsAsync()
        {
            this.service.ChangeState(this.EditTarget, EntityStates.Modified);
            await this.service.SaveChangesAsync();
        }
    }
}