明示的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聞くことになってしまうことです。PropertyChangedViewSchedule