c# - 仅允许在 WPF 文本框中输入数字

标签 c# wpf validation mvvm

我想验证用户输入以确保它们是整数。我该怎么做?我想到了使用 IDataErrorInfo,这似乎是在 WPF 中进行验证的“正确”方法。所以我尝试在我的 ViewModel 中实现它。

但问题是我的文本框绑定(bind)到一个整数字段,并且不需要验证 int 是否为 int。我注意到 WPF 会自动在文本框周围添加一个红色边框以通知用户错误。基础属性不会更改为无效值。但我想通知用户这一点。我该怎么做?

最佳答案

另一种方法是简单地不允许非整数值。 以下实现有点糟糕,我想稍后将其抽象化以使其更易于重用,但这是我所做的:

在我看来,在后面的代码中(我知道如果你是硬核 mvvm,这可能会造成伤害;o)) 我定义了以下函数:

  private void NumericOnly(System.Object sender, System.Windows.Input.TextCompositionEventArgs e)
{
    e.Handled = IsTextNumeric(e.Text);

}


private static bool IsTextNumeric(string str)
{
    System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex("[^0-9]");
    return reg.IsMatch(str);

}

在 XAML View 中,每个只应接受整数的文本框 是这样定义的:

   <TextBox Padding="2"  TextAlignment="Right" PreviewTextInput="NumericOnly" Text="{Binding xxx.yyyy}" MaxLength="1" />

关键属性是PreviewTextInput

关于c# - 仅允许在 WPF 文本框中输入数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4085471/

相关文章:

c# - 在 C# 中转换为泛型类型

c# - 我怎么知道 WPF 窗口在哪个监视器中

ASP.NET:验证用于选择日期(月、日、年)的 3 个下拉框的最佳方法是什么?

c# - 序列化列表<Func<T>>

c# - List<T> 没有实现 SyncRoot!

c# - VS 2008 c# 预构建事件

c# - 使用 WPF 和 EF CodeFirst 构建企业 CRUD 应用程序

wpf - Visual Studio 扩展中的颜色

javascript - 如何在验证时从选择字段中删除类错误

ios - 检查NSString是有效数字-整数还是十进制数字