【发布时间】:2015-06-08 19:17:43
【问题描述】:
这是一个严肃的问题,因为 2 天后我仍然无法让数据注释在 WPF 应用程序中与我的类一起工作。似乎每篇涉及数据注释的 Google 文章都提到了 ASP、MVC 或其他一些我没有使用的基于 Web 的东西。我遵循了之前给出的所有建议,但验证不起作用。
我正在使用实体框架数据库优先方法和使用 MVVMLight 库的 MVVM 模式。 (如果这与它有什么关系,我不知道。)
正如人们所说,我添加了“好友”类。
public class MemberMetadata
{
[Required(AllowEmptyStrings = false, ErrorMessage = "Forename is required.")]
public string Forename;
}
[MetadataType(typeof(MemberMetadata))]
public partial class Member
{
}
我已经在应用程序加载时注册了这个类。 (在 App.xaml.cs 构造函数中)
TypeDescriptor.AddProvider(new AssociatedMetadataTypeTypeDescriptionProvider(typeof(Member), typeof(MemberMetadata)), typeof(Member));
我的绑定是这样设置的:
<ContentControl Template="{StaticResource LabelledTextBox}"
Content="Forename: "
DataContext="{Binding Path=SelectedMember.Forename,
UpdateSourceTrigger=PropertyChanged,
ValidatesOnExceptions=True,
NotifyOnValidationError=True,
ValidatesOnNotifyDataErrors=True,
ValidatesOnDataErrors=True,
Mode=TwoWay}"/>
我还需要做什么?或者更确切地说,我应该怎么做?因为在方法中编写 40 个 if 语句或为我需要的每个验证规则创建一个类是完全荒谬的。
【问题讨论】:
-
查看我的 IDataErrorInfo 更新。
-
this 是我在 WPF 应用程序中完成验证的方式。不需要 IDataErrorInfo。
-
@XAMIMAX,我确实考虑过这样做,但因此我最终会有大约 20 到 30 个课程。这肯定是个坏主意……
-
DataAnnotations 仅在有人编写代码寻找它们时才起作用。 UI 中的绑定验证不能很好地替代 IDataErrorInfo。无论如何,验证是一个业务问题,因此不应该出现在您的 UI 中。您可以编写自己的基类来访问属性上的 DAA 并使用它们来执行验证。我很确定其他人也做了同样的事情,所以你可以在某处获取一些代码。我想我过去做过......
标签: c# wpf mvvm data-annotations ef-database-first