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

- TechDays Paris 2012 : Session pleinière jour 3 par Blog Technique de Romelard Fabrice le il y a 21 heures et 41 minutes

- Mishra Reader : un lecteur RSS très Zune Style en Open Source ! par Cyril Sansus le 02-09-2012, 08:28

- [framework 4] Les Tasks et le Thread UI par Fathi Bellahcene le 02-09-2012, 00:33

- Workflow Foundation 3 a un pied dans la tombe par Blog de Jérémy Jeanson le 02-08-2012, 22:15

- TechDays Paris 2012 : Nouvelles tendances du poste de travail - Bring Your own PC par Blog Technique de Romelard Fabrice le 02-08-2012, 19:42

- TechDays Paris 2012 : System Center Service Manager 2012 Vue d’ensemble par Blog Technique de Romelard Fabrice le 02-08-2012, 17:32

- TechDays Paris 2012 : Pleinière second jour par Blog Technique de Romelard Fabrice le 02-08-2012, 16:23

- TechDays Paris 2012 : Retour d'expérience sur la mise en place d'un Cloud Privé par Blog Technique de Romelard Fabrice le 02-08-2012, 16:04

- TechDays Paris 2012 : Comment SharePoint a sauvé mes TechDays par Blog Technique de Romelard Fabrice le 02-07-2012, 23:59

- Perspective 3.0 pour Silverlight 5.0 par Perspective le 02-07-2012, 22:39