2009-06-30 17 views
0

私のItemsControlにValidation.Errorsを表示する際に問題が発生しています。 Validation.Errorsには何も含まれていません。私はBindingGroupを使用していませんが、独自のカスタムTextBoxを使用しています。ここではItemsControlのコードは次のとおりです。私はItemsControlにに結合したときにValidation.Errorsは何も含まれていない理由WPF Validation.Errors Contains Nothing

 <ItemsControl x:Name="errorList" ItemsSource="{Binding Path = (Validation.Errors), ElementName=gvAddCustomer}" > 
       <ItemsControl.ItemTemplate> 
        <DataTemplate>       
           <TextBlock FontSize="18" Text="{Binding Path=ErrorContent}" /> 
        </DataTemplate> 
       </ItemsControl.ItemTemplate> 
      </ItemsControl> 

My TextBox uses the ErrorTemplate to display the errors beside the TextBox control and it displays correctly with the error message. Here is the style: 

<Style x:Key="TextBoxStyle" TargetType="TextBox"> 
      <Setter Property="Validation.ErrorTemplate"> 
       <Setter.Value> 
        <ControlTemplate> 
         <DockPanel LastChildFill="True"> 
          <TextBlock DockPanel.Dock="Right" 
         Foreground="Orange" 
         FontSize="12pt" 
         Text="{Binding ElementName=MyAdorner, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}"> 
          </TextBlock> 
          <Border BorderBrush="Red" BorderThickness="2"> 
           <AdornedElementPlaceholder Name="MyAdorner" /> 
          </Border> 
         </DockPanel> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 

誰も説明できますか?

答えて

0

私は非常に同様に私の検証をした:

<TextBox 
    Style="{StaticResource TextBoxValidationError}" 
    Name="PatientFirstName" TabIndex="0"> 
    <TextBox.Text> 
     <Binding Path="Patient.PatientFirstName" UpdateSourceTrigger="PropertyChanged"> 
      <Binding.ValidationRules> 
       <bs:NameRequiredRule /> 
      </Binding.ValidationRules> 
     </Binding> 
    </TextBox.Text> 
</TextBox> 

唯一の欠点は、あなたが最初の文字を入力するまで、それは検証を発射しないということです。コンストラクタでこれを強制することができます:

System.Windows.Data.BindingExpression be; 
DependencyProperty txtProp = System.Windows.Controls.TextBox.TextProperty; 
be = PatientFirstName.GetBindingExpression(txtProp); 
be.UpdateSource(); 
+0

ご回答いただきありがとうございます。私はあなたが疑問を誤解していると思います!私はあなたがTextBoxに何も入れていない場合でも検証を起動するカスタムTextBoxを作成しました。しかし、ItemsControlにバインドされているValidation.Errorsプロパティは、Windowが無効な場合でもnullを返します。 – azamsharp

+0

あなたは探しているエラーを作成するために何を使用していますか? 私のコードビハインドクラスでは、 "NameRequiredRule"と呼ばれるバリデータークラスがあります。検証エラーがある場合、エラーオブジェクトを追加します。 – Jay