0

たった4つの楽しみ私は小さな正規表現置換ツールを開発しています。このツールは、入力文字列、検索式(テキストボックスの正規表現検索)、および置換文字列(テキストボックスで置換)によって構成されています。プレビューラベルも実装しました。プレビューは、テキストボックスのそれぞれのテキストが変更されたときに更新されます。

正規表現検索式の検証を追加したいと思います。RegEx文字列が有効でない場合は、テキストボックスの最後に赤いアイコンを追加したいと思います。古い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;
        }
    }

まず、ビジネスオブジェクト_renamerに検証メソッドを作成します。次は何?ViewModelに何を実装する必要がありますか?

  • IsValidプロパティを作成し、PreviewメソッドまたはSearchExpressionのセッターで評価しますか?
  • すべてのOnPropertyChanged( "Preview")をRefresh()メソッドの単純な呼び出しで置き換え、このRefresh()メソッドでIsValidプロパティを更新し、それが有効かどうかをPreviewプロパティにしますか?
  • コンバーターを使用していますか?
  • 他の解決策?

また、正規表現を検証する方法を知っていますか。この瞬間、私はそれを作成し、それが間違っている場合はそれをキャッチしようとします。作成する前に検証することは可能ですか?

4

1 に答える 1

3

ViewModelにIDataErrorInfoを実装すると、それが実行されます。検証の結果を表示するには、使用しているxamlでバインディングのNotifyOnDataErrorsプロパティをTrueに設定する必要もあります。

于 2012-07-20T09:13:49.283 に答える