你应该给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
计算出的属性,以获取您提到的Calendar
的值;再次确保在基础日历值更改时触发OnPropertyChanged
。如果您使用的是MonthCalendar
,您可以通过听其DateChanged
event来做到这一点。
然后,有你Scheduler
采取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
。
“我需要帮助”不是一个有效的问题。我几次重新阅读您的文章,仍然无法找到问题。 – LightStriker
如果我必须假设你说你想从form1访问一些数据并在form2中显示它?我对么 ? – pordi
是的,Form1日期值应出现在Form2中。 – user1141927