Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Thomas Lebrun

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

Actualités

[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

- SQL Server 2008 : Un livre en cours de préparation ! par SQL Server vu par Christian Robert le il y a 8 heures et 44 minutes

- IIS7 : à quel pool d'application correspond le processus w3wp.exe par Atteint de JavaScriptite Aiguë [Cyril Durand] le il y a 9 heures et 40 minutes

- PDC 2008 - J-14 ! par Nix's Blog le il y a 11 heures et 26 minutes

- [Silverlight] La version finale de Silverlight 2 sera disponible en téléchargement demain ! par Thomas Lebrun le il y a 13 heures et 19 minutes

- SharePoint 2007 : Professional Developers Conference 2008 par Philippe Sentenac [MVP SharePoint] le il y a 19 heures et 12 minutes

- [Silverlight] En attendant Silverlight 2 RTW par Blog Technique d'Audrey PETIT le 10-11-2008, 21:55

- Le nouveau Gojira, c’est pour lundi… par CoqBlog le 10-11-2008, 01:18

- SharePoint : nouvel article sur la mise en place des Scopes dans MOSS Searchs par Blog Technique de Romelard Fabrice le 10-10-2008, 17:52

- Hello CS par Le Blog de julz le 10-10-2008, 12:26

- MSDN/TechNet/Microsoft Days Tour 2008 à Lille les 13 et 14 Octobre ! par RedoBlog - The .NET Gentleman !!! le 10-10-2008, 09:35