You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF DataGrid输入验证:如何适配字符串/整数类型输入

解决WPF DataGrid中1-20整数输入验证的问题

我来帮你搞定这个验证问题!你当前的代码有两个核心问题:一是错误地将Validate方法的value参数强转为BindingGroup(实际上在DataGridTextColumn场景下,这个参数是用户输入的原始字符串);二是没有处理输入非整数的情况,直接访问doel.Niveau可能会引发异常。

下面是修改后的完整解决方案:

修改后的C#验证规则代码

public class NiveautredeValidationRule : ValidationRule
{
    // 明确指定验证步骤为原始输入值(默认就是这个,显式写出来更清晰)
    public override ValidationStep ValidationStep => ValidationStep.RawProposedValue;

    public override ValidationResult Validate(object value, CultureInfo cultureInfo)
    {
        // 先将输入值转为字符串,处理空输入的情况
        string input = value?.ToString().Trim();
        if (string.IsNullOrEmpty(input))
        {
            return new ValidationResult(false, "Niveau不能为空!");
        }

        // 尝试将字符串解析为整数,安全处理非数字输入
        if (!int.TryParse(input, out int niveauValue))
        {
            return new ValidationResult(false, "请输入有效的整数!");
        }

        // 验证整数是否在1-20范围内
        if (niveauValue < 1 || niveauValue > 20)
        {
            return new ValidationResult(false, "Niveau moet tussen de 1 en 20 zijn!");
        }

        return ValidationResult.ValidResult;
    }
}

为什么要这么修改?

  • 正确处理输入值类型:DataGridTextColumn的绑定在RawProposedValue阶段传递的是用户输入的原始字符串,而不是BindingGroup,所以我们直接对这个字符串进行处理即可。
  • 安全的类型转换:用int.TryParse替代直接强转,避免输入非数字时抛出异常,同时给出友好的错误提示。
  • 覆盖所有异常场景:包括空输入、非整数输入、超出范围的整数输入,确保所有不符合要求的情况都能被捕获并提示。

可选的XAML调整(非必需)

如果你想更明确地指定验证时机,可以在XAML的ValidationRule中添加ValidationStep属性,不过默认就是RawProposedValue,所以不修改也没问题:

<DataGridTextColumn Header="Niveau">
    <DataGridTextColumn.Binding>
        <Binding Path="Niveau" UpdateSourceTrigger="LostFocus">
            <Binding.ValidationRules>
                <valRule:NiveautredeValidationRule ValidationStep="RawProposedValue"/>
            </Binding.ValidationRules>
        </Binding>
    </DataGridTextColumn.Binding>
</DataGridTextColumn>

这样修改后,就能完美实现1-20的整数输入校验啦!

内容的提问来源于stack exchange,提问作者ivan franken

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:27:11