你應該給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