2016-08-11 10 views
0

私はWPFフォームに単一プロパティ "PersonName"が含まれています。 NULL OR EMPTYにエラーを報告したいと思います。私は私がチュートリアルを査読、データ注釈から解決策を持ってhttp://www.c-sharpcorner.com/uploadfile/20c06b/screen-validation-with-data-annotations-in-wpf/ボタンでのデータアノテーションの画面検証WPFでのクリック

私のXAMLは

<TextBox Text="{Binding PersonName, UpdateSourceTrigger=PropertyChanged, 
NotifyOnValidationError=True, ValidatesOnDataErrors=True}" /> 

<Button Content="Save" IsDefault="True" Command="{Binding SaveCommand}" 
IsEnabled="{Binding }" Width="150" Height="40"/> 

は、私ができる唯一のonPropertyChangeイベントでエラーを確認することができます。 TextBoxという手段に触れることなくボタンを直接押すと、エラーが表示されません。どのように私は同じ機能を起動することができますButtonをクリックします。

私の要件は、プロパティNULLまたはEMPTYある場合PersonNameのは、NULLまたはEMPTYすべきではないですし、私はProperty.Length

によって無効にIDataErrorInfoないに基づいてボタンを、必要とします

当初、検証は適用されません。一度間違ったデータ入力やバリューを打つことなく、私は検証が必要です。

答えて

1

使用IDataErrorInfoインターフェイス上のトリガーを設定するようなあなたのTextBoxValidationRule適用しても

public class ABC : IDataErrorInfo 
{ 
    private string _PersonName; 
    public string PersonName 
    { 
     get { return _PersonName; } 
     set 
     { 
      _PersonName = value; 
      OnPropertyChanged("PersonName"); 
     } 
    } 

    public string Error 
    { 
     get { return string.Empty; } 
    } 

    public string this[string columnName] 
    { 
     get 
     { 
      if ("PersonName" == columnName) 
      { 
       if (String.IsNullOrEmpty(PersonName)) 
       { 
        return "Your Error Message"; 
       } 
      } 
     } 
    } 
} 

と同様に、以下のようにそれをinplementすることができますxamlを

<TextBox Text="{Binding PersonName, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True, NotifyOnValidationError=True, ValidatesOnExceptions=True, ValidatesOnNotifyDataErrors=True}" /> 
と変更してください
+0

PersonNameプロパティを含むViewModelクラス。 IDataErrorInfoインターフェイスメソッドをそのクラスに実装します。 PersonNameプロパティを含むクラス名を共有できますか? –

+0

あなたはこれを参照できますhttp://www.codeproject.com/Tips/858492/WPF-Validation-Using-IDataErrorInfoデモプロジェクト –

+0

Validation TriggerをButtonにバインドする場所を尋ねていますクリック...?ボタンをクリックした時点で私は検証する必要があります。 –

0

あなたは一例でhere は、あなたのButton

<Button Content="Save" IsDefault="True" Command="{Binding SaveCommand} Width="150" Height="40"> 
    <Button.Style> 
     <Style TargetType="Button"> 
      <Setter Property="IsEnabled" Value="False"/> 
      <Style.Triggers> 
      <MultiDataTrigger> 
       <MultiDataTrigger.Conditions> 
       <Condition Binding="{Binding Path=(Validation.HasError), ElementName=PersonName}" Value="False"/> 
       </MultiDataTrigger.Conditions> 
       <Setter Property="IsEnabled" Value="True"/> 
      </MultiDataTrigger> 
      </Style.Triggers> 
      </Style> 
    </Button.Style> 
</Button> 
+0

これをButtonとどのようにバインドできますか? –

関連する問題