ソリューションを作成し、データ クラスを定義
今回は、.NET Framework 4 並びに Silverlight 4 のアセンブリ共有の仕組みを利用し、データ モデルを一元化するサンプルを作成します。また、各データについてはデータ バインディングの仕組みを用いてコントロールにスケジュール情報を表示させます。まず、Visual Studio 2010 を起動し、空のソリューション "xamSchedule" を作成します。
作成したソリューションに Silverlight クラス ライブラリを "ScheduleDataViewModel" と名付け、追加します。その際、ターゲットとするバージョンは Silverlight 4 を指定します。
あらかじめ作成されている Class1.cs ファイルを削除し、新たに ViewModelBase クラスを作成します。
このクラスでは INotifyPropertyChanged インターフェースの実装を行い、さらに、OnPropertyChanged メソッドの実装を行います。このインターフェースを実装することで、今後ロジック側において、プロパティの値が変更された場合にビュー(UI)側に変更通知が行われます。
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 という現在のリソースの主カレンダーを保持するエンティティを追加します。
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 } }
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 } }
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 } }