2011-02-25 9 views
6

Acabo de empezar a jugar con DependencyProperties en WPF y quería ver algunas ideas mientras las entendía.¿Qué uso tiene DependencyProperty cuyo ownerType no es DependencyObject?

Dada la siguiente (y haciendo caso omiso de convención de nomenclatura por ahora):

class MyTestClass 
{ 
    public static readonly DependencyProperty dp1 = DependencyProperty.Register("MyProp", typeof(String), typeof(MyTestClass)); 

    public static readonly DependencyProperty dp2 = DependencyProperty.Register("MyProp2", typeof(String), typeof(MyTestClass), new PropertyMetadata("Hello")); 
} 

encuentro que DP2 lanza una TypeInitializationException con el mensaje "tipo 'MyTestClass' debe derivar de DependencyObject", que yo esperaba, pero DP1 es aceptado muy felizmente

Ahora, entiendo por qué dp2 genera una excepción ya que estoy tratando de registrar metadatos de propiedad en un tipo que no es DependencyObject y está bien. Miré bajo las sábanas y puedo ver la ruta del código que siguen tanto dp1 como dp2, así que comprendo desde una perspectiva del código por qué dp1 no plantea la excepción, pero conceptualmente esperaba que tanto dp1 como dp2 plantearan la misma excepción.

Mi pregunta es qué uso hay en la creación de DependencyProperty como dp1 cuyo ownerType no es DependencyObject, ya que no puedo ver cómo se puede usar sin los métodos GetValue/SetValue en DependencyObject.

Respuesta

3

Editar
El motivo de la primera ist Register-Firma registrar un DependencyProperty que no tiene por defecto el valor que podría ser restaurada por el Clear -method y también tiene ningún cambio de valor de devolución de llamada registrada.

Como no hay un valor predeterminado, no habrá ninguna marca si el valor predeterminado es válido y, por lo tanto, no se emitirá su excepción. Sin embargo, no es uso de dicho registro. No tendrá ningún beneficio y el hecho de que no arroje una excepción no significa que sea bueno para algo, solo que no está mal.

+0

Hola, gracias por su respuesta. Entiendo por qué ownerType se puede establecer en cualquier objeto y la verificación se realiza en tiempo de ejecución. Sin embargo, mi pregunta era realmente, ¿por qué NO arroja una excepción de tiempo de ejecución y, por lo tanto, qué uso hay en la creación de DependencyProperty de esta manera: DependencyProperty.Register ("MyProp", typeof (String), typeof (MyTestClass)) ; –

+0

@Matt__E_: Lo siento, hubiera leído la pregunta más exactamente. He cambiado mi respuesta. Por cierto +1 para la pregunta. – HCL

+1

Hola HCL. Muchas gracias por tomarse el tiempo para leer mi comentario y responder de nuevo. Lo aprecio mucho. No pude pensar en ningún propósito útil para registrar dp1 de esa manera, pero como no arrojó una excepción, pensé que debía tener un propósito del que no tenía conocimiento. Gracias por confirmar que no hace nada útil. –

Cuestiones relacionadas