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

时间:2012-07-20 09:08:58

标签: c# .net mvvm

我正在开发一个小型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(“预览”),并在此Refresh()方法中更新IsValid属性,如果它是有效的我的预览属性?
  • 使用转换器?
  • 其他解决方案?

您也知道如何验证正则表达式。此刻我尝试创建它,如果它错了就抓住它。是否可以在创建之前对其进行验证?

1 个答案:

答案 0 :(得分:3)

在ViewModel中实现IDataErrorInfo会做的事情。 要查看验证结果,您还必须在xaml中将绑定的NotifyOnDataErrors属性设置为True。