WPF 中的自定义 NumericUpDown ValueChanged 事件

本文关键字:ValueChanged 事件 NumericUpDown 自定义 WPF | 更新日期: 2023-09-27 18:33:22

由于WPF不包含WinForms中已知的NumericUpDown控件,因此我实现了自己的控件并负责上限和下限以及其他验证。

现在,WinForms NumericUpDown举办了一个ValueChanged活动,实施起来也很好。我的问题是:如何将TextBoxTextChangedEvent提升到我的主应用程序? Delegate?或者还有其他首选方法来实现这一点吗?

WPF 中的自定义 NumericUpDown ValueChanged 事件

我个人更喜欢为此目的使用delegate,因为我可以为它设置自己的输入参数。我会做这样的事情:

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

使用 object 作为数据类型将允许您在 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
        }
    }
}