DataContext 中的 WPF 数据验证?
WPF Data Validation inside of your DataContext?
我正在使用自定义 ValidationRule 来验证输入到 TextBox 中的数据。
<TextBox>
<Binding Path="Name" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<util:AlphanumericValidationRule/>
<util:StringLengthIfEnteredRule Min="1"/>
</Binding.ValidationRules>
</Binding>
</TextBox>
这可以很好地验证是否只输入了一个字母数字字符串,并且它的长度大于或等于 1。
问题是此 TextBox 所属的表单有一个 "Submit" 按钮,该按钮绑定到 DataContext 内的一个函数。因此,当他们点击提交时,我希望能够知道我的所有字段在数据上下文中是否有效。
我已经对此进行了一些研究,我看到的最好方法是检查代码隐藏文件中的表单是否存在任何错误,并将该信息传递给您的 DataContext .这个解决方案不太理想,所以我想知道是否有某种可绑定的 属性 或我错过的可以提供此功能的东西?
tl;dr 如何告诉我的 DataContext 是否使用 XAML?
验证了字段
我发现执行此操作的最佳方法是实施 IDataErrorInfo。示例如下。
XAML
<TextBox Text="{Binding Name, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}"/>
数据上下文
using System.ComponentModel;
class ViewModel, IDataErrorInfo
{
public string Name {get;set;}
private bool formContainsErrors;
private string formError;
private AlphanumericValidationRule alphanumericValidation;
public ViewModel()
{
this.alphanumericValidation = new AlphanumericValidationRule();
this.formContainsErrors = false;
}
public string Error
{
get { return this.formError; }
}
public string this[string columnName]
{
get
{
this.formError = null;
switch (columnName)
{
case "Name":
this.formError = (string)this.alphanumericValidation.Validate(this.Name, null).ErrorContent;
break;
}
this.formContainsErrors = (this.formError != null);
return this.formError;
}
}
}
有了这个,您可以检查 "formContainsErrors" 以了解您的来源是否包含错误
我正在使用自定义 ValidationRule 来验证输入到 TextBox 中的数据。
<TextBox>
<Binding Path="Name" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<util:AlphanumericValidationRule/>
<util:StringLengthIfEnteredRule Min="1"/>
</Binding.ValidationRules>
</Binding>
</TextBox>
这可以很好地验证是否只输入了一个字母数字字符串,并且它的长度大于或等于 1。
问题是此 TextBox 所属的表单有一个 "Submit" 按钮,该按钮绑定到 DataContext 内的一个函数。因此,当他们点击提交时,我希望能够知道我的所有字段在数据上下文中是否有效。
我已经对此进行了一些研究,我看到的最好方法是检查代码隐藏文件中的表单是否存在任何错误,并将该信息传递给您的 DataContext .这个解决方案不太理想,所以我想知道是否有某种可绑定的 属性 或我错过的可以提供此功能的东西?
tl;dr 如何告诉我的 DataContext 是否使用 XAML?
验证了字段我发现执行此操作的最佳方法是实施 IDataErrorInfo。示例如下。
XAML
<TextBox Text="{Binding Name, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}"/>
数据上下文
using System.ComponentModel;
class ViewModel, IDataErrorInfo
{
public string Name {get;set;}
private bool formContainsErrors;
private string formError;
private AlphanumericValidationRule alphanumericValidation;
public ViewModel()
{
this.alphanumericValidation = new AlphanumericValidationRule();
this.formContainsErrors = false;
}
public string Error
{
get { return this.formError; }
}
public string this[string columnName]
{
get
{
this.formError = null;
switch (columnName)
{
case "Name":
this.formError = (string)this.alphanumericValidation.Validate(this.Name, null).ErrorContent;
break;
}
this.formContainsErrors = (this.formError != null);
return this.formError;
}
}
}
有了这个,您可以检查 "formContainsErrors" 以了解您的来源是否包含错误