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

C# 如何使用MVVM验证字符串/正则表达式?,c#,.net,mvvm,C#,.net,Mvvm,我正在开发一个小的正则表达式替换工具。该工具由输入字符串、搜索表达式(regex search for textbox)和替换字符串(replace by textbox)组成。我还实现了一个预览标签。预览会在“我的文本框”中的每个文本发生更改时更新 我想添加我的正则表达式搜索表达式的验证。如果正则表达式字符串无效,我想在文本框的末尾添加一个红色图标。我知道如何在旧的winform中实现这一点,但我想在MVVM中实现这一点 此时,我的ViewModel如下所示: private str

我正在开发一个小的正则表达式替换工具。该工具由输入字符串、搜索表达式(regex search for textbox)和替换字符串(replace by textbox)组成。我还实现了一个预览标签。预览会在“我的文本框”中的每个文本发生更改时更新

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

此时,我的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;
        }
    }
首先,我将在我的业务对象重命名器中创建一个验证方法。接下来呢?我应该在ViewModel中实现什么

  • 创建IsValid属性并在Preview方法或SearchExpression的setter中对其求值
  • 用对Refresh()方法的简单调用替换所有OnPropertyChanged(“Preview”),在这个Refresh()方法中,我使用了IsValid属性,如果它是有效的,我的Preview属性
  • 使用转换器
  • 其他解决方案

您还知道如何验证正则表达式。在这一刻,我试图创造它,并抓住它,如果它是错误的。是否可以在创建之前对其进行验证?

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

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

+1要创建红色图标,必须创建validation.ErrorTemplate并将其设置为textbox+1;要创建红色图标,必须创建validation.ErrorTemplate并将其设置为textbox