2012-02-22 55 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