gpt4 book ai didi

wpf - 结合文本框的 ValidationRule 和值转换器

转载 作者:行者123 更新时间:2023-12-05 01:13:51 24 4
gpt4 key购买 nike

我有一个简单的问题,但我找不到好的解决方案。我有一个绑定(bind)到双属性值的文本框。用户可以在文本框中输入值,但我只想允许 0 到 100 之间的值。如果在文本框仍具有焦点时输入无效值,我想在文本框周围显示一个红色框(UpdateSourceTrigger =“PropertyChanged” ).如果用户点击远离文本框,我想使用 UpdateSourceTrigger="LostFocus"上的值转换器来限制值。

执行验证规则或转换器很容易,但我不能将它们组合起来,因为我希望验证在 UpdateSourceTrigger="PropertyChanged"上触发,而转换器应在 UpdateSourceTrigger="LostFocus"上触发。不幸的是,在我的 TextBox.Text 上设置绑定(bind)时,我只能选择其中之一。

关于如何实现此功能有什么好的想法吗?

谢谢

/彼得

最佳答案

这是一个有趣的问题。我不确定我是否有完整的解决方案,但我想提出一些想法。

您如何看待创建一个派生自 TextBox 的新类?它可以有两个依赖属性,MinValue 和 MaxValue。然后它可以覆盖 OnLostFocus。 (免责声明:我没有测试过以下代码。)

public class NumericTextBox : TextBox
{
public static readonly DependencyProperty MinValueProperty =
DependencyProperty.Register("MinValue", typeof(double), typeof(NumericTextBox), new UIPropertyMetadata(Double.MinValue));

public static readonly DependencyProperty MaxValueProperty =
DependencyProperty.Register("MaxValue", typeof(double), typeof(NumericTextBox), new UIPropertyMetadata(Double.MaxValue));

public double MinValue
{
get { return (double)GetValue(MinValueProperty); }
set { SetValue(MinValueProperty, value); }
}

public double MaxValue
{
get { return (double)GetValue(MaxValueProperty); }
set { SetValue(MaxValueProperty, value); }
}

protected override void OnLostFocus(System.Windows.RoutedEventArgs e)
{
base.OnLostFocus(e);

double value = 0;

// Parse text.
if (Double.TryParse(this.Text, out value))
{
// Make sure the value is within the acceptable range.
value = Math.Max(value, this.MinValue);
value = Math.Min(value, this.MaxValue);
}

// Set the text.
this.Text = value.ToString();
}
}

这将消除对转换器的需要,并且您的绑定(bind)可以使用 UpdateSourceTrigger=PropertyChanged 来支持您的验证规则。

诚然,我的建议有其缺点。

  1. 这种方法要求您在两个地方使用与验证相关的代码,并且它们需要匹配。 (也许您也可以重写 OnTextChanged,并在那里设置红色边框。)
  2. 这种方法要求您将规则放在 View 层而不是业务对象中,您可能会觉得可以接受也可能不会接受。

关于wpf - 结合文本框的 ValidationRule 和值转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5060557/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com