2012-01-13 14 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

はこれを試してみてください:

EDIT:(ここでは、私はすべてのエラーを表示した定義するスタイルがありますTextBoxコントロール) (Window.Resourcesに入れる)

このスタイルは、その後ToolTip

私はあなたが示唆したものと、私のXAMLコードを編集しよう
<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

エラーメッセージが表示されますが、それは同じです。 no updateはエラーメッセージではありません。 – user735052

+1

@ user735052 'UpdateSourceTrigger = LostFocus'は、TextBoxがフォーカスを失ったときにのみ検証を実行することを意味します。プロパティを変更するたびに検証する場合は、 'PropertyChanged'に変更してください。また、TextBoxの既定の検証コントロールは、その周囲に赤い境界線があります。検証エラーは表示されません。検証エラーを表示するには、検証テンプレートを上書きする必要があります。 – Rachel

+0

私はあなたが言うことを理解していますが、少なくともアプリケーションを実行するときに見ることができないテキストボックスの周りに赤い枠線が表示されるはずです。 – user735052

関連する問題