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