【问题标题】:IDataErrorInfo implemented by entity class实体类实现的IDataErrorInfo
【发布时间】:2012-03-13 02:14:52
【问题描述】:

我有实体类:

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

该类通过 Castle 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

【问题讨论】:

    标签: wpf mvvm caliburn.micro castle-dynamicproxy


    【解决方案1】:

    如果您使用Binding 绑定文本,则设置绑定的ValidatesOnDataErrors=True 属性。希望这会有所帮助。

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

    【讨论】:

    • 这可行,但我想找到其他方法来做到这一点。我发现,当我强制 ConventionManager.ApplyValidation 为我的项目类型设置 binding.ValidatesOnDataErrors = true 时,它​​就可以工作了。所以看来我必须修改这个约定。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多