SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Infragistics NetAdvantageチュートリアル(AD)

Silverlight/WPFでデータバインディングを利用しOutlookライクなスケジュールを構築する その1
Silverlight編

Silverlight/WPFでOutlookライクなアプリ構築(1)

  • このエントリーをはてなブックマークに追加

ソリューションを作成し、データ クラスを定義

 今回は、.NET Framework 4 並びに Silverlight 4 のアセンブリ共有の仕組みを利用し、データ モデルを一元化するサンプルを作成します。また、各データについてはデータ バインディングの仕組みを用いてコントロールにスケジュール情報を表示させます。まず、Visual Studio 2010 を起動し、空のソリューション "xamSchedule" を作成します。

図5 空のソリューションを作成
図5 空のソリューションを作成

 作成したソリューションに Silverlight クラス ライブラリを "ScheduleDataViewModel" と名付け、追加します。その際、ターゲットとするバージョンは Silverlight 4 を指定します。

図6 Silverlight クラス ライブラリを作成
図6 Silverlight クラス ライブラリを作成

 あらかじめ作成されている Class1.cs ファイルを削除し、新たに ViewModelBase クラスを作成します。

図7 ViewModelBase.cs クラスを追加
図7 ViewModelBase.cs クラスを追加

 このクラスでは INotifyPropertyChanged インターフェースの実装を行い、さらに、OnPropertyChanged メソッドの実装を行います。このインターフェースを実装することで、今後ロジック側において、プロパティの値が変更された場合にビュー(UI)側に変更通知が行われます。

コード1 ViewModelBase.cs
using System.ComponentModel;

namespace ScheduleDataViewModel
{
    public class ViewModelBase : INotifyPropertyChanged
    {
       public event PropertyChangedEventHandler PropertyChanged;
       protected void OnPropertyChanged(string propertyName)
       {
           if ( PropertyChanged != null )
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
       }
    }
}

 続けて、Resource , ResourceCalendar, Appointment エンティティを実装した、ResourceInfo,ResourceCalendarInfo, AppointmentInfo クラスを実装します。ResourcInfo クラスには PrimaryResourceCalendarId という現在のリソースの主カレンダーを保持するエンティティを追加します。

コード2 ResourceInfo.cs
namespace ScheduleDataViewModel
{
    public class ResourceInfo : ViewModelBase
    {
        #region プロパティ
        
        private string _id;
        public string Id
        {
            get { return _id; }
            set
            {
                _id = value;
                OnPropertyChanged("Id");
            }
        }

        private string _primaryResourceCalendarId;
        public string PrimaryResourceCalendarId
        {
            get { return _primaryResourceCalendarId; }
            set
            {
                 _primaryResourceCalendarId = value;
                 OnPropertyChanged("PrimaryResourceCalendarId");           
            }
        }
        #endregion
    }
}
コード3 ResourceCalendarInfo.cs
namespace ScheduleDataViewModel
{
    public class ResourceCalendarInfo : ViewModelBase
    {
        #region プロパティ
        private string _id;
        public string Id
        {
            get { return _id; }
            set
            {
                _id = value;
                OnPropertyChanged("Id");
            }
        }
        private string _owningResourceId;
        public string OwningResourceId
        {
            get { return _owningResourceId; }
            set
            {
                _owningResourceId = value;
                OnPropertyChanged("OwningResourceId");
            }
        }
        #endregion
    }
}
コード4 AppointmentInfo.cs
using System;

namespace ScheduleDataViewModel
{
    public class AppointmentInfo : ViewModelBase
    {
        #region プロパティ

        private string _id;
        public string Id
        {
            get { return _id; }
            set
            {
                _id = value;
                OnPropertyChanged("Id");
            }
        }

        private DateTime _start;
        public DateTime Start
        {
            get { return _start; }
            set
            {
                _start = value;
                OnPropertyChanged("Start");
            }
        }

        private DateTime _end;
        public DateTime End
        {
            get { return _end; }
            set
            {
                _end = value;
                OnPropertyChanged("End");
            }
        }

        private string _owningResourceId;
        public string OwningResourceId
        {
            get { return _owningResourceId; }
            set
            {
                _owningResourceId = value;
                OnPropertyChanged("OwningResourceId");
            }
        }

        private string _owningCalendarId;
        public string OwningCalendarId
        {
            get { return _owningCalendarId; }
            set
            {
                _owningCalendarId = value;
                OnPropertyChanged("OwningCalendarId");
            }
        }

        private TimeSpan _reminderInterval;
        public TimeSpan ReminderInterval
        {
            get { return _reminderInterval; }
            set
            {
                _reminderInterval = value;
                OnPropertyChanged("ReminderInterval");
            }
        }

        private bool _reminderEnabled;
        public bool ReminderEnabled
        {
            get { return _reminderEnabled; }
            set
            {
                _reminderEnabled = value;
                OnPropertyChanged("ReminderEnabled");
            }
        }

        private string _recurrence;
        public string Recurrence
        {
            get { return _recurrence; }
            set
            {
                _recurrence = value;
                OnPropertyChanged("Recurrence");
            }
        }

        private int _recurrenceVersion;
        public int RecurrenceVersion
        {
            get { return _recurrenceVersion; }
            set { _recurrenceVersion = value; }
        }

        private string _rootActivityId;
        public string RootActivityId
        {
            get { return _rootActivityId; }
            set
            {
                _rootActivityId = value;
                OnPropertyChanged("RootActivityId");
            }
        }

        private DateTime _originalOccurrenceStart;
        public DateTime OriginalOccurrenceStart
        {
            get { return _originalOccurrenceStart; }
            set
            {
                _originalOccurrenceStart = value;
                OnPropertyChanged("OriginalOccurrenceStart");
            }
        }

        private DateTime _originalOccurrenceEnd;
        public DateTime OriginalOccurrenceEnd
        {
            get { return _originalOccurrenceEnd; }
            set
            {
                _originalOccurrenceEnd = value;
                OnPropertyChanged("OriginalOccurrenceEnd");
            }
        }

        private bool _isOccurrenceDeleted;
        public bool IsOccurrenceDeleted
        {
            get { return _isOccurrenceDeleted; }
            set
            {
                _isOccurrenceDeleted = value;
                OnPropertyChanged("IsOccurrenceDeleted");
            }
        }

        private long _variantProperties;
        public long VariantProperties
        {
            get { return _variantProperties; }
            set
            {
                _variantProperties = value;
                OnPropertyChanged("VariantProperties");
            }
        }

        private bool _isTimeZoneNeutral;
        public bool IsTimeZoneNeutral
        {
            get { return _isTimeZoneNeutral; }
            set
            {
                _isTimeZoneNeutral = value;
                OnPropertyChanged("IsTimeZoneNeutral");
            }
        }
        #endregion
    }
}

次のページ
Silverlight アプリケーション プロジェクトを追加し、XamDayView コントロールを画面に追加

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
Infragistics NetAdvantageチュートリアル連載記事一覧

もっと読む

この記事の著者

インフラジスティックス・ジャパン株式会社 池原 大然(イケハラ ダイゼン)

国内ベンチャー企業にて.NETエンジニアとして開発に従事、2007年インフラジスティックス・ジャパンに入社。現在デベロッパー エバンジェリストとして、.NETやWPF/Silverlight製品や技術の啓蒙活動を行う。Microsoft MVP for Client App Dev 2010/04 ...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5669 2010/12/27 17:28

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング