2011-03-22 2 views
0

버전 3.5를 사용하는 IDataErrorInfo를 구현하는 MVVM 응용 프로그램이 있습니다. 내가 목표로하고 싶은 4.0 목표 프레임 워크 설정을 수정하고 주위에 몇 비트를 변경 (BitmapFrames과 같은). IDataErrorInfo의 암시가 영향을 받았음을 알게 될 때까지 대부분의 일은 잘되고 과정은 비교적 어려웠습니다.3.5에서 wpf targetting 4.0이 IDataErrorInfo 구현에 영향을 미침

<ControlTemplate x:Key="temp__"> 
    <Border BorderBrush="Orange" BorderThickness="2" CornerRadius="4" SnapsToDevicePixels="True">  
     <DockPanel>   
     <Image HorizontalAlignment="Left" VerticalAlignment="Center" 
         Width="16" Height="16" Margin="-20,0,0,0" 
         Source="{StaticResource ErrorIcon}" 
         ToolTip="{Binding ElementName=adornedElement, 
              Path=AdornedElement.(Validation.Errors), 
              Converter={helper:ValidationErrorsToStringConverter}}"/> 
     <AdornedElementPlaceholder Name="adornedElement"/> 
    </DockPanel> 
    </Border> 
</ControlTemplate> 

과 같은 텍스트 상자 스타일로 사용됩니다 :

검증에 대한 나의 컨트롤 템플릿은 다음과 같습니다

내 뷰 모델, GetValidationError (문자열 propertyName 형식)에서
<Setter Property="Validation.ErrorTemplate" Value="{DynamicResource error_holder}"> 

가 스위치를 사용하여 내 규칙에 따라 적절한 속성의 유효성을 검사하십시오.

일단 유효성 검사가 실행되면 업데이트되지 않는 것이 문제입니다. 예를 들어, 필요에 따라 필드를 설정할 수 있습니다. 적재되면, 필요한 필드는 적절한 메시지와 함께 유효하지 않은 것으로 표시됩니다. 이전에는 유효하지 않은 값을 입력하면 툴팁의 오류 메시지가 업데이트됩니다. 그러나 이것은 더 이상 작동하지 않으며 오류 메시지는 여전히 Null 값 메시지로 남아 있습니다.

누구든지 IDataErrorInfo 4.0의 구현 변경 사항에 대해 알고 있습니까? 어떤 생각을 고칠 수 있을까요?

답변

0

좋아, 그래서 이걸 고쳐 놨어. 오류가 수정되었을 때 바인딩 오류를주는 Validation.Errors [0]을 사용하는 기본 구현을 사용하는 대신 변환기를 사용했습니다. 왜 이것이 원래 묘사 된 행동으로 귀결되었는지는 확실하지 않지만 그렇게했습니다. 그래서 원래는 Validation.Errors [0]을 사용하여 다시 변경되었으며 오류 메시지는 올바르게 업데이트되었습니다. 그러나 바인딩 오류가 다시 발생합니다. 대신 여기에 조언을 구현 prevent binding errors 및 문제가 해결되었습니다.

내 ControlTemplate이 지금과 같다 없습니다 : 이전에 필수 필드가 로딩에 오류로 플래그 된

그러나
<ControlTemplate x:Key="temp__"> 
<DockPanel LastChildFill="True"> 
    <Border BorderBrush="Orange" BorderThickness="2" CornerRadius="4" SnapsToDevicePixels="True"> 
    <Border.Effect> 
     <DropShadowEffect ShadowDepth="0" Color="Orange" BlurRadius="10" /> 
    </Border.Effect> 
    <DockPanel>   
     <Image HorizontalAlignment="Left" VerticalAlignment="Center" 
         Width="16" Height="16" Margin="-20,0,0,0" 
         Source="{DynamicResource ErrorIcon}"    
      ToolTip="{Binding ElementName=adornedElement, 
           Path=AdornedElement.(Validation.Errors)/ErrorContent}"/> 
     <AdornedElementPlaceholder Name="adornedElement"/> 
    </DockPanel>   
    </Border> 
</DockPanel> 

는,이 더 이상 발생합니다. 유효성 검사는 사용자 입력으로 인해 다른 오류가 발생한 후에 만 ​​나타납니다. 이 문제를 어떻게 해결할 수 있습니까?

0

바인딩을 볼 수는 있지만 ValidatesOnDataErrors를 추가해야합니다.

+0

제 바인딩은 다음과 같이 보입니다. 내가 말했듯이, 4.0으로 넘어 가기 전에이 모든 것이 잘 동작했다. – pilsdumps

관련 문제