2012-02-16 78 views
1

當我的文本框爲空/空時,我需要顯示「必需的」。在WPF中顯示錯誤消息文本框

在我的XAML:

<TextBox Name="txtLastName" Grid.Column="1" Grid.Row="1" Margin="3"> 
      <TextBox.Text> 
       <Binding Path="LastName"> 
        <Binding.ValidationRules> 
         <validators:Contractor 
            MinimumLength="1" 
            MaximumLength="40" 
            ErrorMessage="Required" /> 
        </Binding.ValidationRules> 
       </Binding> 
      </TextBox.Text> 
     </TextBox> 

在我的課:

public string LastName 
     { 
      get { return _lastName; } 
      set 
      { 
       _lastName = value; 
       NotifyPropertyChanged("LastName");    

      } 
     } 

public event PropertyChangedEventHandler PropertyChanged; 

    private int _minimumLength = -1; 
    private int _maximumLength = -1; 
    private string _errorMessage; 

    public int MinimumLength 
    { 
     get { return _minimumLength; } 
     set { _minimumLength = value; } 
    } 

    public int MaximumLength 
    { 
     get { return _maximumLength; } 
     set { _maximumLength = value; } 
    } 

    public string ErrorMessage 
    { 
     get { return _errorMessage; } 
     set { _errorMessage = value; } 
    } 

    public override ValidationResult Validate(object value,CultureInfo cultureInfo) 
    { 
     ValidationResult result = new ValidationResult(true, null); 
     string inputString = (value ?? string.Empty).ToString(); 
     if (inputString.Length < this.MinimumLength || value==null || 
       (this.MaximumLength > 0 && 
       inputString.Length > this.MaximumLength)) 
     { 
      result = new ValidationResult(false, this.ErrorMessage); 
     } 
     return result; 
    } 


    private void NotifyPropertyChanged(string propertyName) 
     { 
      if (PropertyChanged != null) 
       PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 

我所得到的是文本框變成紅色邊框當數據爲空/空的,我無法看到「必需的」錯誤消息,有什麼想法?

回答

4

(紅色邊框是一個TextBox的默認行爲時的附加屬性Validation.HasError是真實的。 爲了顯示錯誤訊息,你必須做你自己通過結合Validation.ErrorsValidation.Errors是名單 錯誤從應用到TextBox每個校驗。現在,在你的情況,你只所以爲了得到錯誤信息,你需要綁定到Validation.Errors[0].ErrorContent

<StackPanel Orientation="Horizontal"> 
    <TextBox Name="txtLastName" Width="100"> 
     <TextBox.Text> 
      <Binding Path="LastName"> 
       <Binding.ValidationRules> 
        <validators:Contractor 
           MinimumLength="1" 
           MaximumLength="40" 
           ErrorMessage="Required" /> 
       </Binding.ValidationRules> 
      </Binding> 
     </TextBox.Text> 
    </TextBox> 
    <!-- Show error message tot the right of the TextBox--> 
    <TextBlock Text="{Binding (Validation.Errors)[0].ErrorContent, ElementName=txtLastName}"/> 
</StackPanel> 
有一個驗證器
+0

謝謝,但它仍然沒有把消息,有什麼缺失?謝謝你的幫助。 – Sharpeye500 2012-02-17 00:02:58

+0

當我調試我可以看到錯誤內容爲「必需」,但它不顯示在文本框的右側,只是在文本框單獨的紅色邊框。謝謝。 – Sharpeye500 2012-02-17 00:05:08

+0

對不起,我忘了在'Validation.Errors'周圍放置括號,因爲它是附加屬性。我已經更新了上面的xaml。 – Terkel 2012-02-17 00:11:07