c# - 保存时使控制无效

标签 c# wpf mvvm

我有一个包含一些控件的 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/

相关文章:

c# - 帧之间的 UWP 导航而不会丢失汉堡菜单

wpf - SequentialResult,它在Caliburn.Micro中如何工作?

c# - 作为系统运行的Windows服务无法访问C :\users\

c# - 如何提高自定义 BindingList 上 AddRange 方法的性能?

c# - MySQL 检查用户是否存在 C#

wpf - 将 RichTextBox 绑定(bind)到字符串

c# - 从反序列化对象更新 ListView

c# - 是什么让 WCF 测试客户端出现在 WCF > WCF 服务应用程序而不是 ASP.NET Web 应用程序项目中?

WPF 位图图像序列化/反序列化

c# - WPF TextBox Extension无法使用MahApps TextBoxHelper