簡體   English   中英

如何綁定到Windows窗體中的方法

[英]How to Bind to a methods in Windows Forms

我試圖將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);   ;
            }
        }       
    }

如果我將這些添加到二傳手

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM