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 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 :
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 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.
