일부 텍스트 상자에 WPF 유효성 검사를 구현하려고합니다. 나는 도구 팁보다 더 명백한 것으로 사용자에게 유효성 오류를 표시 할 수 있기를 원하지만 다이얼로그 나 메시지 상자보다 더 미묘하다. 이 방법으로 유효성을 검사해야하는 많은 다른 필드가 있기 때문에 Popup 클래스를 사용하여 오류를 표시하기 위해 텍스트 상자에 내장 된 텍스트 상자 대신에 피드백을 첨부해야합니다.WPF 유효성 검사 결과 팝업
내가 겪고있는 문제는 팝업 TextBox의 첨부 된 TextBox (Validation.Errors) 속성에 대한 바인딩이 공격적으로 충분히 업데이트되지 않는다는 것입니다. 오류 객체가있는 경우 텍스트가 업데이트되고 표시됩니다 (즉, 빈 필드에 "이름을 입력하십시오."). 그러나 오류가 변경되면 (즉, 사용자가 유효하지 않은 텍스트를 입력하는 경우) 팝업의 메시지는 그대로 유지됩니다 ... 그들이 유효한 입력을 입력 할 때까지 /까지, 팝업이 원하는대로 사라집니다.
일부 디버깅을했는데 유효성 검사 규칙이 올바르게 호출되고 적절한 결과를 반환하는 동안 팝업에 대한 변환기는 초기 오류가 생성 될 때만 호출된다는 사실을 발견했습니다. 내가 뭘 혼란스러워하는 이유는 유효성 검사 상태가 "오류 없음"에서 "일부 오류 (들)"로 바뀔 때만 팝업이 업데이트되는 이유입니다. 누구든지 Validation.Errors에 대한 변경을 강제로 내 Popup의 TextBox.Text에 반영하는 방법을 알고 있습니까?
다음은 내가 작성한 것에 대한 xaml 예제입니다.
<TextBox Name="MyTextBox">
<TextBox.Text>
<Binding Path="MyText" UpdateSourceTrigger="PropertyChanged" >
<Binding.ValidationRules>
<local:MyTextBoxValidationRule />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
<Popup Name="MyPopup" IsOpen="{Binding ElementName=MyTextBox,
Path=(Validation.HasError), Mode=OneWay}">
<Border BorderThickness="1" BorderBrush="Red" Background="White">
<TextBlock Foreground="Red" Margin="5 5 5 5"
Text="{Binding ElementName=MyTextBox, Path=(Validation.Errors),
Converter={StaticResource errorsToMessageConverter}}"/>
</Border>
</Popup>