Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 验证显示为空/空的窗体上已删除的十进制值_C#_Xaml - Fatal编程技术网

C# 验证显示为空/空的窗体上已删除的十进制值

C# 验证显示为空/空的窗体上已删除的十进制值,c#,xaml,C#,Xaml,我以前问过这个问题 我得到了一个可行的解决方案 现在有人要求我改变这种做法。当用户删除文本框内容时,它必须是必填字段,而不是将文本设置为“0” 因此,如果用户删除文本内容而不是键入“0”,我需要将其捕获为null以强制进行一些验证。 问题是,在删除时,原始值保存在模型中,因为它是一个小数,不能设置为null,如果我按照前面问题的答案所建议的那样做,那么在删除时我将其设置为0,无论哪种方式,我似乎都无法强制验证 我在想,有没有办法检查viewmodel中的文本是否为空?我意识到这必须与视图分开,所

我以前问过这个问题 我得到了一个可行的解决方案

现在有人要求我改变这种做法。当用户删除文本框内容时,它必须是必填字段,而不是将文本设置为“0”

因此,如果用户删除文本内容而不是键入“0”,我需要将其捕获为null以强制进行一些验证。 问题是,在删除时,原始值保存在模型中,因为它是一个小数,不能设置为null,如果我按照前面问题的答案所建议的那样做,那么在删除时我将其设置为0,无论哪种方式,我似乎都无法强制验证


我在想,有没有办法检查viewmodel中的文本是否为空?我意识到这必须与视图分开,所以从技术上讲,你不应该看这种方法,但我只是想说明我要做什么。

需要在视图中进行验证。viewmodel不能也不应该知道视图存在,更不用说对控件有任何引用了。这将是痛苦的实施,甚至更痛苦的生活

public class RequiredDecimalRule : ValidationRule
{
    public RequiredDecimalRule()
    {
    }

    public override ValidationResult Validate(object value, CultureInfo cultureInfo)
    {
        decimal d;

        if (value == null || !Decimal.TryParse(value.ToString(), out d))
        {
            return new ValidationResult(false, "Numeric value is required");
        }

        return new ValidationResult(true, null);
    }
}
XAML



如果不允许您触摸视图,则您不应对此验证负责。但有时这种情况也会发生。然后您要做的是有两个属性:一个十进制和一个字符串。字符串one绑定到视图中的文本框。实际的小数点未绑定到视图。当其中一个属性获得新值时,它会更新另一个属性。如果字符串one得到null或空字符串,请执行错误操作,而不是更新decimal属性

需要在视图中对其进行验证。viewmodel不能也不应该知道视图存在,更不用说对控件有任何引用了。这将是痛苦的实施,甚至更痛苦的生活

public class RequiredDecimalRule : ValidationRule
{
    public RequiredDecimalRule()
    {
    }

    public override ValidationResult Validate(object value, CultureInfo cultureInfo)
    {
        decimal d;

        if (value == null || !Decimal.TryParse(value.ToString(), out d))
        {
            return new ValidationResult(false, "Numeric value is required");
        }

        return new ValidationResult(true, null);
    }
}
XAML


如果不允许您触摸视图,则您不应对此验证负责。但有时这种情况也会发生。然后您要做的是有两个属性:一个十进制和一个字符串。字符串one绑定到视图中的文本框。实际的小数点未绑定到视图。当其中一个属性获得新值时,它会更新另一个属性。如果字符串one得到null或空字符串,请执行错误操作,而不是更新decimal属性