2011-03-22 73 views
0

我有一個MVVM應用程序使用版本3.5實現IDataErrorInfo。我想嘗試和目標4.0,所以已經修改了目標框架設置,並改變了一些位(BitmapFrames等)。大部分事情看起來都很好,而且這個過程相對來說是無痛的,直到我注意到IDataErrorInfo的實現已經受到影響。從3.5的wpf目標版本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> 

,並在文本框樣式用於這樣的:

<Setter Property="Validation.ErrorTemplate" Value="{DynamicResource error_holder}"> 

在我的ViewModel,GetValidationError(字符串propertyName的)使用一個開關根據我的規則驗證適當的屬性。

問題是,一旦驗證被激發,它不會更新。例如,一個字段可以根據需要設置或不設置。加載時,所需的字段將被標記爲無效並帶有適當的消息。以前,當輸入的值仍然無效時,工具提示中的錯誤消息會更新。但是,這不再起作用,並且錯誤消息仍然保留爲空值消息。

有誰知道在4.0中的IDataErrorInfo的實現可能會造成這種情況的任何變化嗎?任何想法如何解決它?

回答

0

好的,所以我解決了這個問題。我沒有使用使用Validation.Errors [0]的默認實現,該錯誤在修復錯誤時給出綁定錯誤,而是使用了轉換器。不知道爲什麼會導致最初描述的行爲,但它確實如此。所以我最初改回到使用Validation.Errors [0]和錯誤消息正確更新。但是,這會導致綁定錯誤返回。相反,我在這裏實施了建議prevent binding errors並解決了問題。

我的控件模板現在看起來是這樣的:

<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 2011-03-22 19:29:11