Validation.Error 이벤트의 발생 순서와 관련하여 이상한 동작이 발생합니다. 설명서 here에 따르면 데이터 바인딩 엔진은 바인딩 된 요소의 Validation.Errors 연결된 속성에 추가 된 ValidationError를 먼저 제거합니다. 따라서,을 제거 에 대한 ValidationErrorEvent은 추가 이전에 해고해야하지만, 이 이벤트를 제거하기 전에 이상하게 내 경우에 추가 이벤트가 트리거됩니다. 여기에 제가 사용하고있는 코드가 있습니다.이상한 순서의 Validation.Error 이벤트 - 제거되기 전에 발동되었습니다.
XAML
<TextBox Grid.Row="3" Grid.Column="1" Name="txtGroupsPerRow" >
<TextBox.Text>
<Binding Path="StandardRack.NoOfGroupsPerRow" ValidatesOnDataErrors="True" NotifyOnValidationError="True"
UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<gs:NumericValidationRule PropertyName="No Of Groups Per Row"/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
코드 숨김
private RoutedEventHandler _errorEventRoutedEventHandler;
private void UserControl_Loaded(object sender, RoutedEventArgs e) {
_errorEventRoutedEventHandler = new RoutedEventHandler(ExceptionValidationErrorHandler);
this.AddHandler(System.Windows.Controls.Validation.ErrorEvent, _errorEventRoutedEventHandler, true);
}
private void UserControl_Unloaded(object sender, RoutedEventArgs e) {
this.RemoveHandler(System.Windows.Controls.Validation.ErrorEvent, _errorEventRoutedEventHandler);
_errorEventRoutedEventHandler = null;
}
//Added fired before Removed
private void ExceptionValidationErrorHandler(object sender, RoutedEventArgs e) {
if (validationErrorEvent.Action == ValidationErrorEventAction.Added) {
viewModel.AddValidationError(propertyPath, validationErrorEvent.Error.ErrorContent.ToString());
}
else if (validationErrorEvent.Action == ValidationErrorEventAction.Removed) {
viewModel.RemoveValidationError(propertyPath);
}
}
사람이이 문제를 건너 않았거나, 내 코드에 뭔가 문제가있다?
방금 같은 문제가 발생했습니다. –