Pendant des année nous avons déclaré des propriétés sous la forme suivante :
VbPublic 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 ClassC#
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 :
VbPublic 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 ClassC#
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.