gpt4 book ai didi

c# - 保存时使控制无效

转载 作者:太空狗 更新时间:2023-10-30 01:17:39 25 4
gpt4 key购买 nike

我有一个包含一些控件的 WPF 窗体。其中一个控件是一个文本框,它指定一个字符串属性 enter image description here

定义者:

        <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");
}
}

如果用户输入控件并在其中写入一些内容,这会很好地工作。

enter image description here

但是,当调用保存方法时,我希望控件检查所有验证,如果出现错误,文本框应为红色。

如何从 View 模型执行此操作?

最佳答案

您可以实现 IDataErrorInfo 来提供一组验证结果。这样在保存之前/同时更容易检查。

你也可以做一个非常肮脏的解决方案:在调用保存时将所有属性设置为它们的当前值,这将使用你当前的方法重新验证它们。您还可以存储验证错误并仅重新验证这些属性(至少更清晰一点)

该方法的一个非常简化的版本是:

this.GetType().GetProperties().ToList()
.ForEach(prop => prop.SetValue(this, prop.GetValue(this, null), null));

Example for IDataErrorInfo

关于c# - 保存时使控制无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30867016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com