c# - 如何使用 MVVM 验证字符串/正则表达式?

标签 c# .net mvvm

Just 4 fun 我正在开发一个小的 RegEx 替换工具。该工具由输入字符串、搜索表达式(文本框的正则表达式搜索)和替换字符串(由文本框替换)组成。我还实现了一个预览标签。预览会根据我的文本框中每个更改的文本进行更新。

我想添加对我的正则表达式搜索表达式的验证。如果 RegEx 字符串无效,我想在文本框的末尾添加一个红色图标。我知道如何在旧的 winform 中做到这一点,但我想在 MVVM 中实现它

screenshot

此时我的 ViewModel 是这样的:

    private string _searchExpression;
    public string SearchExpression
    {
        get { return _searchExpression; }
        set
        {
            if (value != _searchExpression)
            {
                _searchExpression = value;
                OnPropertyChanged("SearchExpression");
                OnPropertyChanged("Preview");
            }
        }
    }

    private string _replaceExpression;
    public string ReplaceExpression
    {
        get { return _replaceExpression; }
        set
        {
            if (value != _replaceExpression)
            {
                _replaceExpression = value;
                OnPropertyChanged("ReplaceExpression");
                OnPropertyChanged("Preview");
            }
        }
    }

    public string Preview
    {
        get
        {
            if (SelectedFile != null && SearchExpression != null && ReplaceExpression != null)
                try
                {
                    return _renamer.Rename(SelectedFile.ToString(), SearchExpression, ReplaceExpression);
                }
                catch (Exception)
                {
                    return string.Empty;
                }
            else
                return string.Empty;
        }
    }

首先,我将在我的业务对象_renamer 中创建一个验证方法。接下来是什么?我应该在 ViewModel 中实现什么?
  • 创建 IsValid 属性并在 Preview 方法或 SearchExpression 的 setter 中对其进行评估?
  • 通过简单调用 Refresh() 方法替换所有 OnPropertyChanged("Preview") 并在此 Refresh() 方法中更新 IsValid 属性,如果它是有效的我的 Preview 属性?
  • 使用转换器?
  • 其他解决方案?

  • 您还知道如何验证正则表达式。此刻,我尝试创建它并在错误时捕获它。是否可以在创建之前对其进行验证?

    最佳答案

    在你的 ViewModel 中实现 IDataErrorInfo 就可以了。
    要查看验证结果,您还必须在您拥有的 xaml 中将绑定(bind)的 NotifyOnDataErrors 属性设置为 True。

    关于c# - 如何使用 MVVM 验证字符串/正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11576291/

    相关文章:

    C# 将 key 发送到其他应用程序到特定的文本字段

    c# - 通过SmtpClient异步发送邮件的两种方式,不同的结果

    .net - "<Module>"类型是什么?

    c# - .NET 在给定时区的情况下将日期时间转换为 UTC

    使用全局声明存储的 ExtJS5 ViewModel

    绑定(bind)到 DataGridRow.IsSelected 属性时出现 Wpf DataGrid 虚拟化问题

    c# - MenuItem 可见性基于子菜单项状态

    c# - 删除具有子目录(非空)的目录

    javascript - 根级别的数据在 $.ajax 调用中无效

    c# - 为什么我无法调试动态加载的程序集?