Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Thomas Lebrun

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

[WPF] Comment savoir si on peut se binder à une propriété et/ou si le mode de binding de celle-ci est à TwoWay par défaut ?

Il peut-être intéressant, dans certains scénarios, de savoir si l'on peut se binder sur une propriété particulière ou de savoir si le mode de binding par défaut de cette propriété est TwoWay.

Bien sur, la première solution sera de faire le test et d'agir en conséquences si une exception est retournée. Mais il existe un moyen plus propre de parvenir à nos fins.

En effet, chaque Dependency Property (car je rappele que seules les Dependency Properties peuvent-être utilisées comme cible de binding) possède une méthode nommée GetMetaData qui permet de connaitre un grand nombre d'information sur une propriété particulière comme son mode de binding par défaut, si elle peut-être bindée, etc....:

private void GetPropertyMetaData(DependencyProperty property)

{

    var btn = new Button();

    var pm = property.GetMetadata(btn) as FrameworkPropertyMetadata;

 

    if (pm != null)

    {

        var isDataBindingAllowed = pm.IsDataBindingAllowed;

 

        var isBindTwoWayByDefault = pm.BindsTwoWayByDefault;

    }

}

La liste des méta-données qu'il est possible de connaitre pour une propriété particulière est assez conséquente, comme le montre cette image:

image

On pourrait tout de même trouver étrange de disposer d'une méta-donnée nommée IsDataBindingAllowed lorsque l'on sait que les Dependency Properties sont les seules propriétés que l'on peut utiliser pour du binding.

Si les Dependency Properties disponibles avec WPF sont, à ma connaissance (mais il y en a surement que je ne connais pas) toutes bindables, cela n'est pas forcément le cas pour Dependency Properties que vous crééz vous-même. Et pour créer une Dependency Property qui ne peut pas être bindée ou, plus généralement, pour créer une Dependency Property en lui spécifiant des méta-données particulières, il vous suffit de la créer de la même manière que d'habitude mais d'utiliser les membres de l'énumération FrameworkPropertyMetadataOptions pour spécifier les différentes méta-données de votre propriété:

public int Count

{

    get { return (int)GetValue(CountProperty); }

    set { SetValue(CountProperty, value); }

}

 

public static readonly DependencyProperty CountProperty =

DependencyProperty.Register("Count", typeof(int), typeof(Window1), new FrameworkPropertyMetadata(0, FrameworkPropertyMetadataOptions.NotDataBindable));

 

Et le tour est joué 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: vendredi 1 août 2008 09:52 par Thomas LEBRUN
Classé sous : ,

Commentaires

Pas de commentaires

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- [Refactoring] ReSharper pour Visual Studio 2010 (Preview) par Thomas Jaskula le il y a 4 heures et 10 minutes

- [Refactoring] Analyser vos exceptions avec ReSharper Exceptional par Thomas Jaskula le il y a 5 heures et 24 minutes

- SharePoint 2007 : patterns & practices SharePoint Guidance par Philippe Sentenac [MVP SharePoint] le il y a 19 heures et 4 minutes

- [Visual Studio 2010] Les tests cases c’est bien, mais je vais devoir tout réécrire ? par Etienne Margraff le il y a 20 heures et 0 minutes

- MVP[Gribouillon].AddYear par The Grib's Lair [Sébastien PICAMELOT - MVP SharePoint] le il y a 20 heures et 15 minutes

- Clinique INSIA - Projet de fin d’Etudes (Silverlight 3 MVVM et OutOfBrowser, WCF, TFS) - Part 1 par David REI le 07-02-2009, 23:38

- C’est la crise ? Bah pourquoi cramer du budget pub alors ? par Nix's Blog le 07-02-2009, 15:31

- Soyons MVP ! par TheSaib .NET blog le 07-02-2009, 12:15

- SharePoint : Gestion des Erreurs 6398, 7076 et 6482 par Blog Technique de Romelard Fabrice le 07-02-2009, 11:53

- EF avec WPF par Matthieu MEZIL le 07-02-2009, 10:18