我有一个包含一些控件的 WPF 窗体。其中一个控件是一个文本框,它指定一个字符串属性
定义者:
<TextBox>
<TextBox.Text>
<Binding Path="ExtractName" UpdateSourceTrigger="LostFocus">
<Binding.ValidationRules>
<ExceptionValidationRule />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
绑定(bind)属性定义为:
private string _extractName;
public string ExtractName
{
get { return _extractName; }
set
{
var extract_id = (int?) null;
if(SelectedExtract != null)
{
extract_id = SelectedExtract.ExtractId;
}
if(SelectedExtract == null)
if (WebServiceCall.ExtractNameExists(extract_id, value))
{
_isExtractNameValid = false;
throw new ApplicationException("Extract Name already exists");
}
if (value == "")
{
_isExtractNameValid = false;
throw new ApplicationException("Extract Name cannot be empty");
}
_extractName = value;
_isExtractNameValid = true;
RaisePropertyChanged("ExtractName");
}
}
如果用户输入控件并在其中写入一些内容,这会很好地工作。
但是,当调用保存方法时,我希望控件检查所有验证,如果出现错误,文本框应为红色。
如何从 View 模型执行此操作?
最佳答案
您可以实现 IDataErrorInfo
来提供一组验证结果。这样在保存之前/同时更容易检查。
你也可以做一个非常肮脏的解决方案:在调用保存时将所有属性设置为它们的当前值,这将使用你当前的方法重新验证它们。您还可以存储验证错误并仅重新验证这些属性(至少更清晰一点)
该方法的一个非常简化的版本是:
this.GetType().GetProperties().ToList()
.ForEach(prop => prop.SetValue(this, prop.GetValue(this, null), null));
关于c# - 保存时使控制无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30867016/