明示的Scheduler
なデータソースを指定し、イベントを使用して、基になる日付の変更を通知する必要があります。データソースに独自のインターフェイスを与えることをお勧めします。
interface IFromToDateProvider : INotifyPropertyChanged
{
DateTime From { get; }
DateTime To { get; }
}
次に、ViewSchedule
このインターフェイスを実装します。
class ViewSchedule : IFromToDateProvider
{
DateTime _from;
public DateTime From
{
get { return _from; }
set
{
if (_from == value) return;
_from = value;
OnPropertyChanged("From");
}
}
DateTime _to;
public DateTime To
{
get { return _to; }
set
{
if (_to == value) return;
_to = value;
OnPropertyChanged("To");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
イベントが発生するように、プロパティを使用してfromとtoの値を更新してください。または、言及したsから値を取得するだけのプロパティを作成From
してTo
計算することもできます。繰り返しになりますが、基になるカレンダーの値が変更されたときにCalendar
必ず起動してください。OnPropertyChanged
を使用している場合は、そのイベントMonthCalendar
をリッスンすることでこれを行うことができます。DateChanged
次に、コンストラクターパラメーターとしてaScheduler
を取り、そのイベントIFromToDateProvider
をリッスンします。PropertyChanged
class Scheduler
{
readonly IFromToDateProvider _provider;
public Scheduler(IFromToDateProvider provider)
{
_provider = provider;
_provider.PropertyChanged += provider_PropertyChanged;
}
void provider_PropertyChanged(object sender, PropertyChangedEventArgs propertyChangedEventArgs)
{
// update display with new values in _provider.From and/or
// _provider.To in this event handler
}
}
ViewSchedule
これは、がインスタンスを作成することを前提としていScheduler
ます。逆の場合Scheduler
は、を作成した後でイベントをリッスンするだけViewSchedule
です。どちらでもない場合は、プロパティとして設定するだけです。重要な部分は、のイベントをScheduler
聞くことになってしまうことです。PropertyChanged
ViewSchedule