数据注释是否仅适用于 ASP.NET?
Do Data Annotations only work with ASP.NET?
这是一个严肃的问题,因为 2 天后我仍然无法让数据注释与 WPF 应用程序中的 classes 一起工作。似乎每篇涉及数据注释的 Google 文章都提到了 ASP、MVC 或其他一些我没有使用的基于 Web 的东西。我已经遵循了之前给出的所有建议,但验证不起作用。
我正在使用 Entity Framework 数据库优先方法和使用 MVVMLight 库的 MVVM 模式。 (不知道和这个有没有关系。)
我添加了 'buddy' class 正如人们所说。
public class MemberMetadata
{
[Required(AllowEmptyStrings = false, ErrorMessage = "Forename is required.")]
public string Forename;
}
[MetadataType(typeof(MemberMetadata))]
public partial class Member
{
}
我在应用程序加载时注册了此 class。 (在 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 语句或为我需要的每个验证规则创建一个 class 是完全荒谬的。
在您的 class 中,为属性添加注释并继承自 PropertyChangedNotification
。此外,实现 INotifyPropertyChanged
和 IDataErrorInfo
接口。
这是一个严肃的问题,因为 2 天后我仍然无法让数据注释与 WPF 应用程序中的 classes 一起工作。似乎每篇涉及数据注释的 Google 文章都提到了 ASP、MVC 或其他一些我没有使用的基于 Web 的东西。我已经遵循了之前给出的所有建议,但验证不起作用。
我正在使用 Entity Framework 数据库优先方法和使用 MVVMLight 库的 MVVM 模式。 (不知道和这个有没有关系。)
我添加了 'buddy' class 正如人们所说。
public class MemberMetadata
{
[Required(AllowEmptyStrings = false, ErrorMessage = "Forename is required.")]
public string Forename;
}
[MetadataType(typeof(MemberMetadata))]
public partial class Member
{
}
我在应用程序加载时注册了此 class。 (在 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 语句或为我需要的每个验证规则创建一个 class 是完全荒谬的。
在您的 class 中,为属性添加注释并继承自 PropertyChangedNotification
。此外,实现 INotifyPropertyChanged
和 IDataErrorInfo
接口。