您应该提供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 的值,以便触发事件。或者,您可以创建From
和计算仅从您提到To
的 s 中获取值的属性;Calendar
再次确保OnPropertyChanged
在基础日历值更改时触发。如果你正在使用MonthCalendar
,你可以通过监听它的DateChanged
事件来做到这一点。
然后,让您Scheduler
将 aIFromToDateProvider
作为构造函数参数并监听其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
a 的事件ViewSchedule
。