如何绑定到 Windows 窗体中的方法
本文关键字:窗体 Windows 方法 何绑定 绑定 | 更新日期: 2023-09-27 17:56:01
我正在尝试monthCalendar
日期绑定到MyDate
属性并避免循环调用,但 monthCalendar 没有当前选定日期的get;set;
属性。它只有方法SetDate(DateTime date);
用于设置新的日期和事件monthCalendar1_DateChanged
,monthCalendar1_DateSelected
返回当前选定的日期。如何将它们绑定到MyDate
财产?在 WPF 中,方法可用作资源,因此可以绑定到其结果。如何在System.Windows.Forms
实现这一目标?
private static readonly object _dateLock = new object();
private DateTime myDate = DateTime.Now;
public DateTime MyDate
{
get
{
lock (_dateLock)
{
//updating control
return myDate;
}
}
set
{
lock (_dateLock)
{
//getting date from control
myDate = value;
SetDate(new DateTime(myDate.Ticks));
}
}
}
//Fired when date changed
private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e)
{
//update source
lock (_dateLock)
{
MyDate = new DateTime(e.Start.Ticks);
}
}
private void monthCalendar1_DateSelected(object sender, DateRangeEventArgs e)
{
//Check if bottom region with current date clicked
if (IsCurrentDateClikced())
{
//update source
lock (_dateLock)
{
MyDate = new DateTime(DateTime.Now.Ticks); ;
}
}
}
如果我将这些添加到二传手
set
{
lock (_dateLock)
{
// Setting date
myDate = value;
monthCalendar1.TodayDate = myDate;
monthCalendar1.SelectionStart = myDate;
monthCalendar1.SelectionEnd = myDate;
}
}
日历按预期响应。循环触发在这里没有发生,也许是因为一旦它们具有相同的日期,Changed
事件就不会被触发,因为没有变化?
不过,我不得不注释掉if (IsCurrentDateClikced())
。它存在吗?
我已经通过添加通知解决了它。
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e)
{
//update source
lock (_dateLock)
{
MyDate = new DateTime(e.Start.Ticks);
NotifyPropertyChanged("MyDate");
}
}
private void monthCalendar1_DateSelected(object sender, DateRangeEventArgs e)
{
//Check if bottom region with current date clicked
if (IsCurrentDateClikced())
{
//update source
lock (_dateLock)
{
MyDate = new DateTime(DateTime.Now.Ticks);
NotifyPropertyChanged("MyDate");
}
}
}