Magazine Internet

[WPF] Bonnes pratiques pour DependencyProperty

Publié le 05 juin 2009 par Jeremy.jeanson

Pendant des année nous avons déclaré des propriétés sous la forme suivante :

Vb
Public Class MaClass

    Private _MaProperty As String

    Public Property MaProperty() As String
        Get
            Return _MaProperty
        End Get
        Set(ByVal value As String)
            _MaProperty = value
        End Set
    End Property

End Class
C#
public class MaClass
{
    private String _MaProperty;

    public String MaProperty
    {
        get { return _MaProperty; }
        set { _MaProperty = value; }
    }
}

Depuis WPF et ses DependencyProperty, la snyppet “popdp” a changé bien des choses. Oui mais voila comment faire pour s’en sortir pour trouver une erreur qui semble se produire lors du premier appel à la classe (avant même une quelconque instanciation) vu que les DependencyProperty sont statiques ?

La solution est toutes bête, on relit le dernier post que j’ai fait sur les variable statiques et les constructeurs statiques et on applique tout bêtement ;)

Ce qui donne :

Vb
Public Class MaClass
    Inherits DependencyObject

    Public Shared ReadOnly MaPropertyProperty As DependencyProperty

    Shared Sub New()
        MaPropertyProperty = _
                           DependencyProperty.Register("MaProperty", _
                           GetType(String), GetType(MaClass), _
                           New FrameworkPropertyMetadata(String.Empty))
    End Sub

    Public Property MaProperty() As String
        Get
            Return GetValue(MaPropertyProperty)
        End Get

        Set(ByVal value As String)
            SetValue(MaPropertyProperty, value)
        End Set
    End Property

End Class
C#
public class MaClass : DependencyObject
{
    public static readonly DependencyProperty MaPropertyProperty;

    static MaClass()
    {
        MaPropertyProperty =
                    DependencyProperty.Register("MaProperty",
                    typeof(String), typeof(MaClass),
                    new UIPropertyMetadata(String.Empty));
    }

    public String MaProperty
    {
        get { return (String)GetValue(MaPropertyProperty); }
        set { SetValue(MaPropertyProperty, value); }
    }
}
On peut noter au passage l’utilisation des UIPropertyMetadata et FrameworkPropertyMetadata pour dont je parlerai certainement dans un prochain article.

Retour à La Une de Logo Paperblog

A propos de l’auteur


Jeremy.jeanson 1573 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte

Dossier Paperblog