如何绑定到 Windows 窗体中的方法

本文关键字:窗体 Windows 方法 何绑定 绑定 | 更新日期: 2023-09-27 17:56:01

我正在尝试monthCalendar日期绑定到MyDate属性并避免循环调用,但 monthCalendar 没有当前选定日期的get;set;属性。它只有方法SetDate(DateTime date);用于设置新的日期和事件monthCalendar1_DateChangedmonthCalendar1_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);   ;
            }
        }       
    }

如何绑定到 Windows 窗体中的方法

如果我将这些添加到二传手

        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");
        }
    }       
}