71 votes

Comment créer une propriété de dépendance en lecture seule?

Comment voulez-vous créer un accès en lecture seule dépendance de la propriété? Quelles sont les meilleures pratiques pour le faire?

Plus précisément, ce qui estompe m'a le plus est le fait qu'il n'y a pas de mise en œuvre de

DependencyObject.GetValue()  

qui prend un System.Windows.DependencyPropertyKey en tant que paramètre.

System.Windows.DependencyProperty.RegisterReadOnly renvoie un DependencyPropertyKey objet plutôt qu'un DependencyProperty. Alors, comment êtes-vous censé pour accéder à votre lecture seule propriété de dépendance si vous ne pouvez pas faire des appels à GetValue? Ou êtes-vous censé transformer le DependencyPropertyKey sur une plaine vieux - DependencyProperty objet?

Des conseils et/ou le code serait GRANDEMENT apprécié!

151voto

Kenan E. K. Points 8497

C'est facile, en fait:

     private static readonly DependencyPropertyKey ReadOnlyPropPropertyKey
        = DependencyProperty.RegisterReadOnly("ReadOnlyProp", typeof(int), typeof(OwnerClass),
            new FrameworkPropertyMetadata((int)0,
                FrameworkPropertyMetadataOptions.None,
                new PropertyChangedCallback(OnReadOnlyPropChanged)));

    public static readonly DependencyProperty ReadOnlyPropProperty
        = ReadOnlyPropPropertyKey.DependencyProperty;

    public int ReadOnlyProp
    {
        get { return (int)GetValue(ReadOnlyPropProperty); }
        protected set { SetValue(ReadOnlyPropPropertyKey, value); }
    }

    private static void OnReadOnlyPropChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        ((OwnerClass)d).OnReadOnlyPropChanged(e);
    }
 

Vous utilisez la clé uniquement lorsque vous définissez la valeur en code privé / protégé / interne. En raison de la configuration protégée ReadOnlyProp , ceci est transparent pour vous.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X