【问题标题】:Do Data Annotations only work with ASP.NET?数据注释是否仅适用于 ASP.NET?
【发布时间】: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


【解决方案1】:

在您的类中,为属性添加注释并从PropertyChangedNotification 继承。另外,实现INotifyPropertyChangedIDataErrorInfo 接口。

【讨论】:

  • 我应该在我的模型或视图模型中实现 INotifyPropertyChanged 吗?我已经在 ViewModel 中实现了它。
  • 查看模型。您的视图模型需要绑定到您的视图才能正常工作。自从我从事 WPF 工作以来已经有一段时间了,但我可以向您保证,注释应该对您有用。
  • 我已将 IDataErrorInfo 接口添加到我的视图模型中,但从未调用索引器。 INotifyPropertyChanged 已经在我的 ViewModel 继承自的 ObservableObject 中实现。
  • 我已经在我的模型中实现了 IDataErrorInfo,这似乎已经修复了它。我不确定这是我应该做的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-03
  • 1970-01-01
  • 2010-12-06
  • 1970-01-01
相关资源
最近更新 更多