Liaison WPF: utiliser DataAnnotations pour ValidationRules
J'ai lu beaucoup de post de Blog sur WPF Validation et sur DataAnnotations
. Je me demandais si il ya un moyen propre à utiliser DataAnnotations
comme ValidationRules
pour mon entité.
Donc au lieu d'avoir ceci (Source) :
<Binding Path="Age" Source="{StaticResource ods}" ... >
<Binding.ValidationRules>
<c:AgeRangeRule Min="21" Max="130"/>
</Binding.ValidationRules>
</Binding>
Où vous devez avoir votre
public class AgeRangeRule : ValidationRule
{...}
Je veux WPF Liaison à aller voir l'Âge de la propriété et de regarder pour DataAnnotation un peu comme ceci:
[Range(1, 120)]
public int Age
{
get { return _age; }
set
{
_age = value;
RaisePropertyChanged<...>(x => x.Age);
}
}
Des idées si cela est possible ?
source d'informationauteur Philippe Lavoie | 2011-02-04
Vous devez vous connecter pour publier un commentaire.
Le plus proche de l'approche que j'ai trouvé est :
Source
Source et Source
De cette façon, le DataAnnotation fonctionne très bien, j'ai obtenu un minimum à faire sur le code XAML
ValidatesOnDataErrors="True"
et c'est une belle solution de contournement d'Aaron post avec le DataAnnotation.Dans votre modèle, vous pourriez mettre en œuvre
IDataErrorInfo
et de faire quelque chose comme ça...Vous devrez également informer l'objectif contraignant de la nouvelle définition du comportement.
MODIFIER:
Si vous souhaitez uniquement utiliser des Annotations de Données, vous pouvez suivre cette post de blog qui décrit la façon d'accomplir la tâche.
Mise à JOUR:
La représentation historique du lien ci-dessus.
Sonne bien Aaron. Je suis juste en WPF et étude databindings la semaine prochaine au travail 😉 ne peut Donc pas juger entièrement de votre réponse...
Mais avec winforms, j'ai utilisé La Validation de Bloc d'Application de la Entlib et mis en œuvre IDataErrorInfo (en fait IDXDataErrorInfo parce que nous travaillons avec DevExpress contrôles) sur une entité de base (business object) et qui fonctionne très bien!
C'est un peu plus sophistiqué que la solution que vous avez esquissé dans cette façon que vous placez votre logique de validation sur l'objet et non pas dans l'interface de mise en œuvre. Rendre plus de la programmation orientée objet et maintenable. À l'ID(XD)ataErrorInfo je viens de l'appeler de Validation.Valider(ce), ou encore mieux, obtenir le programme de validation pour le bien que l'interface est appelée et valider spécifiques du programme de validation. N'oubliez pas d'appeler le [SelfValidation] ainsi en raison de validation des combinaisons de propriétés 😉
Vous pourriez être intéressé par le BookLibrary exemple d'application de la WPF Cadre applicatif (WAF). Il utilise le DataAnnotations attributs de Validation en collaboration avec WPF Liaison.
Récemment, j'ai eu la même idée à l'aide de l'Annotation de Données de l'API pour valider EF Code Premières classes POCO en WPF. Comme Philippe poster ma solution utilise la réflexion, mais tout le code nécessaire est inclus dans un générique du programme de validation.
Le code ci-dessus montre une ClientValidatorRule qui est dérivé du générique GenericValidationRule classe. La classe Client est ma POCO classe qui sera validé.