2012-05-09 18 views
6

Estoy aprendiendo propiedades de dependencia. Leí muchos mensajes & libros, pero todavía no estoy claro.Dependency property error

El programa que se muestra a continuación es el que escribí para aprender. Algún error en eso, por favor ayuda a resolverlo. Tengo preguntas.

  1. El uso principal del elemento de propiedad Dependencia personalizada es para la notificación de cambio?
  2. Encontré un código 'IsDefaultProperty' para Botón en un libro de texto WPF. Significa 'IsDefault' propiedad es una propiedad de dependencia?
  3. ¿Por qué mostraron ese código? Significa, internamente, en la clase Button, ¿se define así? (Mostraron el código interno?) O mostraron cómo definir como personalizado?

Aquí está mi código:

namespace DependencyProperties 
{ 
    public class Contact 
    { 
     private int id=100; 
     private string name="shri"; 
     public static readonly DependencyProperty IsPresentProperty; 

     public int ID 
     { 
      get { return id; } 
     } 
     public string NAME 
     { 
      get { return name; } 
     } 

     static Contact() 
     { 
      IsPresentProperty = DependencyProperty.Register("IsPresent", typeof(bool),typeof(Contact),new FrameworkPropertyMetadata(false,new PropertyChangedCallback(OnIsPresentChanged))); 
     } 

     public bool Present 
     { 
      get { return (bool)GetValue(Contact.IsPresentProperty); } 
      set { SetValue(Contact.IsPresentProperty, value); } 
     } 

     private static void OnIsPresentChanged(DependencyObject o, DependencyPropertyChangedEventArgs e) 
     { 

     } 
    } 
} 

y veo el error:

> Error: GetValue and SetValue does not exist in the current context 

Respuesta

14

The main use of custom Dependency property element is for the notification of change?

No, eso también se puede arreglar haciendo que la clase implemente INotifyPropertyChanged también. Las propiedades de dependencia para proporcionar notificaciones de cambio, pero el razonamiento real es algo diferente. Ver Why dependency properties? y How is the WPF property system economical?

I found an 'IsDefaultProperty' code for Button in a WPF text book. It means 'IsDefault' property is a dependency property?

Sí. Nombrar un campo "FooBarProperty" es la convención de WPF para definir propiedades de dependencia; puede consultar los documentos para IsDefaultProperty y comprobar que se trata de una propiedad de dependencia, e incluso la documentación de IsDefault tiene una sección llamada "información de propiedad de dependencia".

Why they shown that code? It means, internally, in Button class, its defined like that? (They showed internal code?) or they showed how to define as custom?

No estoy seguro de lo 'que' es el código, pero sí, la propiedad es casi seguro que se define como que en Button ('casi' porque no estoy seguro de lo que usted se refiere).

Error: GetValue and SetValue does not exist in the current context

Eso es porque no se derivan de DependencyObject.

12

DependencyProperty Las instancias se deben definir en instancias de DependencyObject. Por lo tanto, su clase debe derivar de DependencyObject, o una de sus subclases. Muchos tipos en WPF se derivan de esto, incluido el Button.

Así que para obtener su código de trabajo, en este caso, debe utilizar:

public class Contact : DependencyObject 
{ 
    // ... 

Es por esto que usted está recibiendo un error en GetValue y SetValue - que se definen en DependencyObject.

+0

Gracias asignar. Error resuelto – SHRI

+0

Muy útil. Esta respuesta debería tener más votos. –