Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Thomas Lebrun

Tout sur WPF, LINQ, C# et .NET en général !

Actualités

[WPF] Valider les binding WPF

Lorsque l’on travaille avec WPF et que l’on manipule des objets complexes, il est très agréable d’utiliser le binding, sur l’interface utilisateur, pour afficher les informations concernant les objets métier.

Bien que le moteur WPF permette d’afficher, grâce aux templates, une interface différente si une erreur est détectée, il reste tout de même à la charge du développeur d’effectuer le test permettant de savoir si, sur un contrôle précis, une règle de validation est violée ou non.

Afin de vous simplifier la vie, vous pouvez utiliser la méthode suivante, qui se charge de valider toutes les règles de binding présentes sur un Dependency Object et sur ces enfants:

public static class Validator

{   

    public static bool IsValid(DependencyObject parent)   

    {

        // Validate all the bindings on the parent       

        var valid = true;       

 

        var localValues = parent.GetLocalValueEnumerator();       

 

        while (localValues.MoveNext())

        {

            var entry = localValues.Current;           

 

            if (BindingOperations.IsDataBound(parent, entry.Property))

            {

                var binding = BindingOperations.GetBinding(parent, entry.Property);

 

                if (binding != null)

                {

                    foreach (var rule in binding.ValidationRules)

                    {

                        var result = rule.Validate(parent.GetValue(entry.Property), null);                   

 

                        if (!result.IsValid)

                        {

                            var expression = BindingOperations.GetBindingExpression(parent, entry.Property);

 

                            if (expression != null)

                            {

                                Validation.MarkInvalid(expression, new ValidationError(rule, expression, result.ErrorContent, null));

                            }

 

                            valid = false;

                        }

                    }

                }

            }

        }       

 

        // Validate all the bindings on the children       

        for (var i = 0; i != VisualTreeHelper.GetChildrenCount(parent); ++i)

        {

            var child = VisualTreeHelper.GetChild(parent, i);           

 

            if (!IsValid(child))

            {

                valid = false;

            }

        }      

 

        return valid;   

    }

}

Pour utiliser cette méthode, rien de plus simple:

var isValid = Validator.IsValid(this.tbClassName);

 

if (isValid)

{

    //

}

Attention, je tiens à préciser que cette méthode n’est pas de moi mais qu’elle est disponible dans le livre “Programming WPF” de Chris Sell & Ian Griffiths Smile

 

A+

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: jeudi 6 novembre 2008 10:58 par Thomas LEBRUN
Classé sous : ,

Commentaires

romain verdier a dit :

"Programming WPF" doit être un livre très, heu, large...

# novembre 6, 2008 12:07

Thomas LEBRUN a dit :

Pas compris la remarque mais si tu es en train de dire que le nom n'est pas assez explicite, une recherche dans Google donne ce résultat en premier:

http://www.amazon.com/Programming-WPF-Chris-Sells/dp/0596510373

# novembre 6, 2008 13:32

Jb Evain a dit :

A mon avis il veut dire que ce bout de code est un vrai arbre de noël.

# novembre 6, 2008 13:41

romain verdier a dit :

Bien vu Jb! Tu gagnes un deuxième écran.

# novembre 6, 2008 18:32

Thomas LEBRUN a dit :

Ok, ok: ce bout de code n'est certes pas parfait/idéal/cequevousvoulez mais il a l'avantage de fonctionner :)

# novembre 6, 2008 19:32
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Compte rendu : SharePoint / O365 : des pratiques pour une meilleure productivité par The Mit's Blog le 12-12-2014, 18:11

- [TFS] Suppression des feature SQL Entreprise en masse par Blog de Jérémy Jeanson le 12-06-2014, 09:18

- [Clean Code] règles de nommage par Fathi Bellahcene le 12-04-2014, 22:59

- Windows To Go 10 et Upgrades impossibles par Blog de Jérémy Jeanson le 12-04-2014, 21:38

- SharePoint OnPremise: Statistiques d’utilisation pour traquer les sites fantomes par Blog Technique de Romelard Fabrice le 12-03-2014, 10:28

- SharePoint 2007: Script PowerShell permettant le backup de toutes les collections de sites d’une application Web par Blog Technique de Romelard Fabrice le 12-02-2014, 10:00

- Xamarin : un choix précieux par .net is good... C# is better ;) le 12-01-2014, 15:10

- Office 365: Comparaison des composants pour préparer votre migration de SharePoint 2007 vers Office 365 par Blog Technique de Romelard Fabrice le 11-28-2014, 16:20

- Créer un périphérique Windows To Go 10 ! par Blog de Jérémy Jeanson le 11-21-2014, 04:54

- RDV à Genève le 12 décembre pour l’évènement “SharePoint–Office 365 : des pratiques pour une meilleure productivité !” par Le blog de Patrick [MVP Office 365] le 11-19-2014, 10:40