画面に表示させるデータをコードで生成する
今回はコード ビハインドを用いて画面に表示するデータを生成します。まず、先ほど作成した ScheduleDataViewModel プロジェクトを xamSchedule_SL プロジェクトに追加します。追加する場合は、プロジェクトの [参照設定] のコンテキスト メニューから [参照の追加] を選択します。その後表示される追加ダイアログで [プロジェクト] タブを選択し、ScheduleDataViewModel を追加します。
次に xamSchedule_SL プロジェクトに新しいフォルダーを "ViewModels" と名付け作成し、
そのフォルダー内に新しいクラスを "MainPageViewModel.cs" と名付け、作成します。
MainPageViewModel.cs クラスでは、先ほど参照を追加した ScheduleDataViewModel を用いて、Resource, ResourceCalendar, Appointment を格納するプロパティを作成します。また、現在のユーザーを示す、CurrentUserId プロパティを実装します。
using System; using ScheduleDataViewModel; using System.Collections.ObjectModel; namespace xamSchedule_SL.ViewModels { public class MainPageViewModel : ViewModelBase { #region プロパティ private ObservableCollection<ResourceInfo> _resources; public ObservableCollection<ResourceInfo> Resources { get { return _resources; } set { _resources = value; OnPropertyChanged("Resources"); } } private ObservableCollection<ResourceCalendarInfo> _resourceCalendars; public ObservableCollection<ResourceCalendarInfo> ResourceCalendars { get { return _resourceCalendars; } set { _resourceCalendars = value; OnPropertyChanged("ResourceCalendars"); } } private ObservableCollection<AppointmentInfo> _appointments; public ObservableCollection<AppointmentInfo> Appointments { get { return _appointments; } set { _appointments = value; OnPropertyChanged("Appointments"); } } private string _currentUserId; public string CurrentUserId { get { return _currentUserId; } set { _currentUserId = value; OnPropertyChanged("CurrentUserId"); } } #endregion // その他の実装 } }
次にコンストラクタを実装します。今回の記事ではコードでデータを作成します。ここでの注意点としては、予定の開始時刻、終了時刻は世界標準時であるということです。
using System; using ScheduleDataViewModel; using System.Collections.ObjectModel; namespace xamSchedule_SL.ViewModels { public class MainPageViewModel : ViewModelBase { #region プロパティ // 省略 #endregion #region コンストラクタ public MainPageViewModel() { // リソースを作成 Resources = new ObservableCollection<ResourceInfo>(); Resources.Add(new ResourceInfo() { Id = "R0001", PrimaryResourceCalendarId = "C0001" }); // リソースカレンダーを作成 ResourceCalendars = new ObservableCollection<ResourceCalendarInfo>(); ResourceCalendars.Add(new ResourceCalendarInfo() { Id = "C0001", OwningResourceId = "R0001" }); // 予定を追加 Appointments = new ObservableCollection<AppointmentInfo>(); Appointments.Add(new AppointmentInfo() { Id = "A0001", OwningCalendarId = "C0001", OwningResourceId = "R0001", Start = DateTime.Now.ToUniversalTime(), End = DateTime.Now.AddHours(2).ToUniversalTime(), }); // 現在のユーザー ID を指定 this.CurrentUserId = this.Resources[0].Id; } #endregion } }
この MainPageViewModel は実行時に MainPage の DataContext に格納します。そのため、MainPage.xaml.cs を開き、コンストラクタで MainPageViewModel のインスタンスを作成します。
using System.Windows.Controls; using xamSchedule_SL.ViewModels; namespace xamSchedule_SL { public partial class MainPage : UserControl { public MainPage() { InitializeComponent(); MainPageViewModel vm = new MainPageViewModel(); this.DataContext = vm; } } }
これでスケジュールに表示させるためのデータの作成が完了しました。