2009-07-13 17 views
52

Come si crea una proprietà di dipendenza di sola lettura? Quali sono le migliori pratiche per farlo?Come si crea una proprietà Dipendenza di sola lettura?

In particolare, ciò che mi ha stumping di più è il fatto che non c'è alcuna implementazione di

DependencyObject.GetValue() 

che prende un System.Windows.DependencyPropertyKey come parametro.

System.Windows.DependencyProperty.RegisterReadOnly restituisce un oggetto D ependencyPropertyKey piuttosto che un DependencyProperty. Quindi, come si dovrebbe accedere alla proprietà di dipendenza di sola lettura se non è possibile effettuare chiamate a GetValue? O dovresti in qualche modo convertire lo DependencyPropertyKey in un semplice oggetto vecchio DependencyProperty?

Consiglio e/o codice sarebbe apprezzato GRANDE!

risposta

113

E 'facile, in realtà (via RegisterReadOnly):

public class OwnerClass : DependencyObject // or DependencyObject inheritor 
{ 
    private static readonly DependencyPropertyKey ReadOnlyPropPropertyKey 
     = DependencyProperty.RegisterReadOnly("ReadOnlyProp", typeof(int), typeof(OwnerClass), 
      new FrameworkPropertyMetadata((int)0, 
       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 ... 
} 

si utilizza il tasto solo quando si imposta il valore nel codice protetto privato// interno. A causa del settaggio protetto ReadOnlyProp, questo è trasparente per te.

+0

Non è un codice completato. – Developer

+1

@Singh come intendete "non completato"? –

+0

Non si menziona OwnerClass di classe pubblica. Se qualche nuovo sviluppatore vede questo codice, confonderà ciò che è OwnerClass, quindi lo aggiorna. – Developer

Problemi correlati