Phi*_*hil 14 .net c# validation wpf user-interface
我正在使用MVVM创建一个对话框,提示用户输入一个http:// URL到KML文件.当URL格式正确时,需要启用"确定"按钮,当URL格式不正确时,需要禁用该按钮.
现在按钮绑定到ICommand,CanExecute()的逻辑如下所示:
return !string.IsNullOrEmpty(CustomUrl);
Run Code Online (Sandbox Code Playgroud)
每次按键时都会引发命令的CanExecuteChanged事件,到目前为止它运行良好.
现在我想做一些实际的验证.我知道这样做的唯一方法如下:
try
{
var uri = new Uri(CustomUrl);
}
catch (UriFormatException)
{
return false;
}
return true;
Run Code Online (Sandbox Code Playgroud)
这不是bueno,特别是因为每次击键都会进行验证.我可以这样做,以便在用户点击OK按钮时验证URI,但我宁愿不这样做.除了捕获异常之外,还有更好的方法来验证URI吗?
Yah*_*hia 35
是的-你可以使用静态方法Uri.IsWellFormedUriString这个
return Uri.IsWellFormedUriString (CustomUrl, UriKind.Absolute);
Run Code Online (Sandbox Code Playgroud)
在我看来,可能的解决方案是两个:
Uri.TryCreate方法以避免异常(如果您不需要创建Uri对象,则可以使用Uri.IsWellFormedUriString方法);我更愿意使用第二种选择,创建正确的RegEx可能很困难并且可能导致许多问题.