wpf ValidationRule 校验数据输入
public class CountValidationRule : ValidationRule
{
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
double d = 0.0;
if (double.TryParse((string)value, out d) )
{
return new ValidationResult(true, "OK");
}
else
{
return new ValidationResult(false, "无法解析输入");
}
}
}
引入规则
<UserControl.Resources>
<ResourceDictionary>
<converter:CountValidationRule x:Key="CountValidationRule"/>
</ResourceDictionary>
</UserControl.Resources>
使用规则
<TextBox hc:InfoElement.Title="纬度: " >
<TextBox.Text>
<Binding Path="StationInfo.Latitude">
<Binding.ValidationRules>
<converter:CountValidationRule/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
如果需要校验界面是否包含未解决的报错可以获取页面所有的报错信息
public bool AreAllValidationsSucceeded(DependencyObject dependencyObject)
{
bool allValidationsSucceeded = true;
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(dependencyObject); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(dependencyObject, i);
if (child is FrameworkElement)
{
FrameworkElement frameworkElement = child as FrameworkElement;
// 检查绑定错误
if (Validation.GetHasError(frameworkElement))
{
allValidationsSucceeded = false;
break; // 一旦发现有错误,就不再遍历
}
}
// 递归遍历子元素
if (!AreAllValidationsSucceeded(child))
{
allValidationsSucceeded = false;
break;
}
}
return allValidationsSucceeded;
}
调用
bool allValidationsSucceeded = AreAllValidationsSucceeded(this);
if (!allValidationsSucceeded)
{
return;
}
//TODO
留待后查,同时方便他人
联系我:renhanlinbsl@163.com
联系我:renhanlinbsl@163.com
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2018-08-13 c#+linux+mono+Redis集群(解决无法连接Redis的问题)