2012-01-13 90 views
2

我是WPF的新手,試圖在提交表單上實現驗證控制。WPF驗證控件

任何人都可以幫助我。我的代碼不會顯示任何錯誤消息,即使我輸入無效的數據感染它什麼也不做。

這裏是我的代碼,

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 
} 


public class UserName : INotifyPropertyChanged, IDataErrorInfo 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 
    public void OnPropertyChanged(PropertyChangedEventArgs e) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, e); 
    } 

    private string username; 
    public string _UserName 
    { 
     get { return username; } 
     set 
     { 
      username = value; 
      OnPropertyChanged(new PropertyChangedEventArgs("_UserName")); 
     } 
    } 
    public string this[string propertyName] 
    { 
     get 
     { 
      if (propertyName == "_UserName") 
      { 
       bool valid = true; 
       foreach (char c in _UserName) 
       { 
        if (!Char.IsLetterOrDigit(c)) 
        { 
         valid = false; 
         break; 
        } 
       } 
       if (!valid) 
        return "The Username can only contain letters and numbers."; 
      } 
      return null; 
     } 
    } 
    public string Error 
    { 
     get { return null; } 
    } 
} 

} 我的XAML代碼,

<Grid> 
    <Label Content="User Name" Height="28" HorizontalAlignment="Left" Margin="27,37,0,0" Name="UserNameLB" VerticalAlignment="Top" Width="96" /> 
    <TextBox Height="23" HorizontalAlignment="Left" Margin="135,37,0,0" Name="UserNameTB" VerticalAlignment="Top" Width="189"> 
     <TextBox.Text> 
      <Binding Path="_UserName"> 
       <Binding.ValidationRules> 
        <DataErrorValidationRule></DataErrorValidationRule> 
       </Binding.ValidationRules> 
      </Binding> 
     </TextBox.Text> 
    </TextBox> 

</Grid> 

回答

0

試試這個:

編輯:(這裏的風格我定義它顯示了所有錯誤TextBox controls) (把它放在Window.Resources

這種樣式,然後顯示錯誤消息在ToolTip

<Style x:Key="{x:Type TextBox}" TargetType="{x:Type TextBox}"> 
    <Style.Triggers> 
     <Trigger Property="Validation.HasError" Value="true"> 
      <Setter Property="ToolTip" 
        Value="{Binding RelativeSource={x:Static RelativeSource.Self}, 
        Path=(Validation.Errors)[0].ErrorContent}"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

<Grid> 
    <Label Content="User Name" Height="28" HorizontalAlignment="Left" Margin="27,37,0,0" Name="UserNameLB" VerticalAlignment="Top" Width="96" /> 
    <TextBox Height="23" HorizontalAlignment="Left" Margin="135,37,0,0" 
      Name="UserNameTB" VerticalAlignment="Top" Width="189" 
      Text={Binding Path=_UserName, UpdateSourceTrigger=LostFocus, 
        ValidatesOnDataErrors=true, NotifyOnValidationError=true} />  
</Grid> 

Source

+0

我嘗試用你建議的一個編輯我的XAML代碼,但它是一樣的。沒有更新沒有錯誤信息。 – user735052 2012-01-13 16:26:15

+1

@ user735052 UpdateSourceTrigger = LostFocus意味着它只會在TextBox失去焦點時才運行驗證。如果您希望它在屬性更改時進行驗證,請將其更改爲「PropertyChanged」。另外,TextBox的默認驗證控件是一個紅色邊框。它不顯示驗證錯誤。要使其顯示驗證錯誤,您需要覆蓋驗證模板。 – Rachel 2012-01-13 16:37:38

+0

我明白你想說什麼,但至少應該顯示文本框周圍的紅色邊框,當我運行我的應用程序時,我無法看到它。 – user735052 2012-01-13 16:48:43