Comment créez-vous une propriété de dépendance en lecture seule? Quelles sont les meilleures pratiques pour le faire?
Plus précisément, ce qui me frappe le plus, c’est le fait qu’il n’y a pas de mise en œuvre de
DependencyObject.GetValue()
qui prend un System.Windows.DependencyPropertyKey
comme paramètre.
System.Windows.DependencyProperty.RegisterReadOnly
renvoie un object D ependencyPropertyKey
plutôt qu’un object DependencyProperty
. Alors, comment êtes-vous censé accéder à votre propriété de dépendance en lecture seule si vous ne pouvez pas appeler GetValue? Ou êtes-vous censé convertir en quelque sorte le DependencyPropertyKey
dans un vieil object DependencyProperty
?
Les conseils et / ou le code seraient grandement appréciés!
C’est facile, en fait (via RegisterReadOnly ):
public class OwnerClass : DependencyObject // or DependencyObject inheritor { private static readonly DependencyPropertyKey ReadOnlyPropPropertyKey = DependencyProperty.RegisterReadOnly("ReadOnlyProp", typeof(int), typeof(OwnerClass), new FrameworkPropertyMetadata(default(int), FrameworkPropertyMetadataOptions.None)); public static readonly DependencyProperty ReadOnlyPropProperty = ReadOnlyPropPropertyKey.DependencyProperty; public int ReadOnlyProp { get { return (int)GetValue(ReadOnlyPropProperty); } protected set { SetValue(ReadOnlyPropPropertyKey, value); } } //your other code here ... }
Vous utilisez la clé uniquement lorsque vous définissez la valeur en code privé / protégé / interne. En raison du setter protégé de ReadOnlyProp
, ceci est transparent pour vous.