簡體   English   中英

WPF中的自定義NumericUpDown ValueChanged事件

[英]Custom NumericUpDown ValueChanged event in WPF

由於WPF不包含WinForms已知的NumericUpDown控件,因此我實現了自己的控件,並處理上限和下限值以及其他驗證。

現在, WinForms NumericUpDown舉行了一個ValueChanged事件,它也很適合實現它。 我的問題是:如何將TextBoxTextChangedEvent提升到我的主應用程序? Delegate 或者還有其他任何首選方式來實現這一點嗎?

我個人更喜歡為此目的使用delegate ,因為我可以為它設置我自己的輸入參數。 我會做這樣的事情:

public delegate void ValueChanged(object oldValue, object newValue);

使用object作為數據類型將允許您在NumericUpDown控件中使用不同的數字類型,但是每次你必須將它NumericUpDown轉換為正確的類型...我會發現這有點痛苦,所以如果你的控件只會使用一種類型,例如int ,然后你可以將你的delegate更改為:

public delegate void ValueChanged(int oldValue, int newValue);

然后,您需要一個公共屬性,以便控件的用戶附加處理程序:

public ValueChanged OnValueChanged { get; set; }

像這樣使用:

NumericUpDown.OnValueChanged += NumericUpDown_OnValueChanged;

...

public void NumericUpDown_OnValueChanged(int oldValue, int newValue)
{
    // Do something with the values here
}

當然,除非我們實際從控件內部調用委托,否則不要忘記在沒有附加處理程序的情況下檢查null

public int Value
{ 
    get { return theValue; }
    set
    { 
        if (theValue != value)
        {
            int oldValue = theValue;
            theValue = value;
            if (OnValueChanged != null) OnValueChanged(oldValue, theValue);
            NotifyPropertyChanged("Value"); // Notify property change
        }
    }
}

暫無
暫無

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

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