2012-07-20 136 views
0

只是4個樂趣我正在開發一個小的RegEx替換工具。該工具由輸入字符串,搜索表達式(正則表達式搜索文本框)和替換字符串(由文本框替換)組成。我也實現了一個預覽標籤。預覽更新了我的文本框中每個文本的更改。如何使用MVVM驗證字符串/正則表達式?

我想補充我的正則表達式搜索表達式的驗證。如果RegEx字符串無效,我想在文本框的末尾添加一個紅色圖標。我知道該怎麼做,在舊的winform,但我想實現這MVVM

screenshot

在這一刻我的視圖模型是這樣的:

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()方法和此Refresh()方法的簡單調用來替換所有OnPropertyChanged(「Preview」)我是否在使用IsValid屬性並且它的有效性是否爲預覽屬性?
  • 使用轉換器?
  • 其他解決方案?

也你知道如何驗證正則表達式。在這個時刻,我嘗試創建它並在錯誤的情況下捕獲它。創建它之前可以驗證它嗎?

回答

3

在您的ViewModel中實現IDataErrorInfo會做到這一點。 要查看驗證結果,您還必須在xaml中將綁定的NotifyOnDataErrors屬性設置爲True。

+1

+1,創建您必須創建的紅色圖標並將Validation.ErrorTemplate設置爲您的文本框 – blindmeis 2012-07-20 10:43:12

相關問題