2012-02-22 100 views
1

實現我的實體類:IDataErrorInfo的通過實體類

public class Project 
{ 
    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
    public virtual string Description { get; set; } 
} 

該類通過城堡DynamicProxy攔截器實現IDataErrorInfo的和INotifyPropertyChanged的接口。我在視圖模型這個類的一個實例:

public class ProjectEditViewModel : Screen 
{ 
    public Project Project { get; set; } 

    .... 
} 

我在視圖中顯示這樣的數據:

<TextBox Grid.Row="0" Grid.Column="1" x:Name="Project_Name" Margin="4"/> 
<TextBox Grid.Row="0" Grid.Column="2" x:Name="Project_Description" Margin="4"/> 

INotifyPropertyChanged的效果很好,但不IDataErrorInfo的。它看起來像IDataErrorInfo只有在視圖模型實現時才起作用。有沒有簡單的方法來驗證實體對象而不是viewmodel?

通過這種面向方面的編程做數據驗證對我來說是最好的意義,所以我想使用它。

,如果這是某種方式與我的問題連接,我使用這種風格顯示驗證錯誤:

<Style TargetType="{x:Type TextBox}"> 
    <Style.Triggers> 
    <Trigger Property="Validation.HasError" Value="true"> 
     <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors).CurrentItem.ErrorContent}"/> 
    </Trigger> 
    </Style.Triggers> 
</Style> 

我的XAML的理解是真窮很抱歉,如果我錯過了什麼東西是顯而易見的。

我問這個問題也CaliburnMicro討論:http://caliburnmicro.codeplex.com/discussions/338196

回答

1

如果使用Binding到文本綁定然後設置綁定的ValidatesOnDataErrors=True財產。希望這會有所幫助。

<TextBox Grid.Row="0" Grid.Column="1" x:Name="Project_Name" Margin="4" 
     Text="{Binding Project.Name, ValidatesOnDataErrors=True}" /> 
+0

這個工程,但我想找到一些其他方式如何做到這一點。我發現當我強制ConventionManager.ApplyValidation爲我的項目類型設置binding.ValidatesOnDataErrors = true時,它就起作用了。所以看起來我必須修改這個約定。 – 2012-02-22 21:11:57