Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf IDataErrorInfo由实体类实现_Wpf_Mvvm_Caliburn.micro_Castle Dynamicproxy - Fatal编程技术网

Wpf IDataErrorInfo由实体类实现

Wpf IDataErrorInfo由实体类实现,wpf,mvvm,caliburn.micro,castle-dynamicproxy,Wpf,Mvvm,Caliburn.micro,Castle Dynamicproxy,我有实体类: 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 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实现时才起作用。是否有任何简单的方法可以在实体对象而不是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讨论中也提出了这个问题:

如果您使用
绑定
来绑定文本,那么设置绑定的
validatesOnDaerRors=True
属性。希望这会有所帮助

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

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

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


这是可行的,但我想找到其他方法。我发现,当我强制ConventionManager.ApplyValidation为我的项目类型设置binding.validateSondaerRors=true时,它就可以工作了。所以看起来我必须修改这个约定。这是可行的,但我想找到其他的方法。我发现,当我强制ConventionManager.ApplyValidation为我的项目类型设置binding.validateSondaerRors=true时,它就可以工作了。看来我必须修改这个惯例。