C#(WPF)のカレンダーコントロールを使用して日付の取得や編集する簡単な方法を紹介します。スケジュールや時系列のあるデータを扱う場合に便利です。GUIとしても直感的で優れているので、日付選択の操作がある場合は積極的に使用しましょう。
WPFのカレンダーコントロール
XAMLに<Calendar/>を追加するだけでGUI上にカレンダーが表示できます。
選択された日付は「SelectedDate」に格納されます。一番よく使うパラメータになると思います。
サンプルコード(WPF,MVVM)
以下GUIのサンプルを作成しました。

一番下に選択されている日付が表示されます。
カレンダー上の日付をクリック、または日付を1つ進める/戻すボタンを押すと選択されている日付が変化し、表示も更新されます。

サンプルコードはMVVM形式です。
必要があれば以下記事も参考にしてください。
本サンプルではModelはありません。
View
XAMLは以下の通り。
<Grid>
<StackPanel Orientation="Vertical" >
<!--カレンダーコントロール-->
<Calendar SelectedDate="{Binding selectedDate}"/>
<!--日付操作ボタン-->
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<Button Content=" -1 day " Command="{Binding PrevBtn_Pushed}" Margin="10"/>
<Button Content=" +1 day " Command="{Binding NextBtn_Pushed}" Margin="10" />
</StackPanel>
<!--選択日表示-->
<TextBlock Text="{Binding selectedDate}" Margin="10" Background="AliceBlue"/>
</StackPanel>
</Grid>
コードビハインドは以下の通り。
いつものやつです。
using CalendarSample.ViewModels;
using System.Windows;
namespace CalendarSample.Views
{
public partial class MainWindow : Window
{
MainViewModel vm = new MainViewModel();
public MainWindow()
{
InitializeComponent();
this.DataContext = vm;
}
}
}
ViewModel
バインドする変数selectedDate、それを操作するためのコマンドが2つあります。
using CalendarSample.Common;
using System;
using System.ComponentModel;
using System.Windows.Input;
namespace CalendarSample.ViewModels
{
internal class MainViewModel : INotifyPropertyChanged
{
//コマンド(日付を進める・戻す)
public ICommand NextBtn_Pushed { get; set; }
public ICommand PrevBtn_Pushed { get; set; }
public MainViewModel()
{
//コマンド
NextBtn_Pushed = new RelayCommand(NextDay_Command);
PrevBtn_Pushed = new RelayCommand(PrevDay_Command);
}
//コマンド
private void NextDay_Command()
{
//日付を進める
selectedDate = selectedDate.AddDays(1);
}
private void PrevDay_Command()
{
//日付を戻す
selectedDate = selectedDate.AddDays(-1);
}
//変数(選択されている日付)
private DateTime _selectedDate = DateTime.Today;
public DateTime selectedDate
{
get { return _selectedDate; }
set
{
_selectedDate = value;
NotifyPropertyChanged("selectedDate");
}
}
//変数の更新通知用
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
}
}
本サンプルでは「1日 進む/戻る」ですが、月単位・年単位でもできます。
さいごに
本記事では、WPFのカレンダーの簡単な使用方法を紹介しました。
関連記事:日付・経過日数の表示形式について




コメント