none
Problemas con DependencyProperty RRS feed

  • Pregunta

  • Hola a todos, bueno ya hace un tiempo que ando en wpf y me empiezo a encontrar con problemas que me están ganando la lucha, tengo una clase la cual hereda de

    DependencyObject.

     

    creo una propiedad la cual me queda de la siguiente manera:

     

     

         public static readonly DependencyProperty UsuarioIDProperty =

            DependencyProperty.Register("UsuarioID", typeof(int), typeof(FacturaSecuenciaNumero),

                                                    new PropertyMetadata(0,

                                                                         new PropertyChangedCallback(UsuarioIDCallBack),

                                                                         new CoerceValueCallback(CoerceTipoUsuarioID)     

                                                        ));

     

     

            private static object CoerceTipoUsuarioID(DependencyObject d, object basevalue)

            {

     

                int value = (int)basevalue;

     

                if (value < 0)

                {

                     return value * -1;

                }

                else

                {

                     return value;

                }

                  

            }

     

            private static void UsuarioIDCallBack(DependencyObject d, DependencyPropertyChangedEventArgs e)

            {

               

                MessageBox.Show(e.OldValue.ToString() + " ahora " + e.NewValue.ToString());

            }

     

     

            public int UsuarioID

            {

                get { return (int) GetValue(UsuarioIDProperty); }

                set { SetValue(UsuarioIDProperty, value); }

            }

     

     

    Lo que yo quiero saber es sobre que esta Bindiada esa propiedad, entonces hago lo siguiente:

     

     

    Binding enlace1 = BindingOperations.GetBinding(classfact, FacturaSecuenciaNumero.UsuarioIDProperty);

     

    Pero me trae un enlace null, si alguno me puede dar una mano, se agradece, un saludo.


    Luis Salvarezza
    martes, 15 de marzo de 2011 20:30

Respuestas

  • Hola Luis.

    No se exactamente para que heredas de DependencyObject.

    ¿que es lo que quieres hacer exactamente y la clase que hereda de DependencyObject para que la has creado?.

    En cualquier caso, en el codigo que has puesto, es correcto, tiene que dar null, ¿por que?, fijate en esta linea:

     

    Binding enlace1 = BindingOperations.GetBinding(classfact, FacturaSecuenciaNumero.UsuarioIDProperty);
    

     

    Si te das cuenta intentas obtener el enlace de la clase classFact (la cual tu no has enlazado en ningun momento, por eso siempre es null).

    Tu enlace es el siguiente:

     

    textBox2.SetBinding(TextBox.TextProperty, binding);
    

     

    Aqui estas enlazando la propiedad de dependencia 'Text' del textBox a tu objeto 'classFact', de modo que ¿quien tiene el enlace?, exacto, es el textBox2 el que esta enlazado y no al reves, de modo que si quieres obtener el enlace debes hacer algo asi:

     

    Binding enlace1 = BindingOperations.GetBinding(textBox2, TextBox.TextProperty);
    

     

    Aqui si que obtendras el enlace, ya que esta asignado al objeto textBox2.

    No se si me he explicado correctamente, si tienes alguna duda comentalo

     

     


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/
    jueves, 17 de marzo de 2011 11:39

Todas las respuestas

  • Hola Luis.

    No se si entiendo bien lo que describes.

    ¿quieres saber a que esta enlazada la propiedad?

    el enlace lo tienes que establecer tu, si tu no estableces un enlace siempre te retornara null.

    La Propiedad 'UsuarioIDProperty' del objeto classFact ¿lo tienes enlazado con un binding en alguna parte del codigo?.


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/
    miércoles, 16 de marzo de 2011 11:14
  • David como te va, si esa propiedad esta enlazada, pero como vos decís me trae null, puede ser que este haciendo mal esa parte??

                binding = new Binding();

                binding.Path = new PropertyPath("UsuarioID");

                binding.Source = classFact ;

                binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;

                textBox2.SetBinding(TextBox.TextProperty, binding);

     

    Ese es el binding que tengo lo tengo, pero no esta sobre la prop de dependencia , espero tu respuesta, un saludo.

     

     

     


    Luis Salvarezza
    miércoles, 16 de marzo de 2011 11:33
  • Hola Luis.

    No se exactamente para que heredas de DependencyObject.

    ¿que es lo que quieres hacer exactamente y la clase que hereda de DependencyObject para que la has creado?.

    En cualquier caso, en el codigo que has puesto, es correcto, tiene que dar null, ¿por que?, fijate en esta linea:

     

    Binding enlace1 = BindingOperations.GetBinding(classfact, FacturaSecuenciaNumero.UsuarioIDProperty);
    

     

    Si te das cuenta intentas obtener el enlace de la clase classFact (la cual tu no has enlazado en ningun momento, por eso siempre es null).

    Tu enlace es el siguiente:

     

    textBox2.SetBinding(TextBox.TextProperty, binding);
    

     

    Aqui estas enlazando la propiedad de dependencia 'Text' del textBox a tu objeto 'classFact', de modo que ¿quien tiene el enlace?, exacto, es el textBox2 el que esta enlazado y no al reves, de modo que si quieres obtener el enlace debes hacer algo asi:

     

    Binding enlace1 = BindingOperations.GetBinding(textBox2, TextBox.TextProperty);
    

     

    Aqui si que obtendras el enlace, ya que esta asignado al objeto textBox2.

    No se si me he explicado correctamente, si tienes alguna duda comentalo

     

     


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/
    jueves, 17 de marzo de 2011 11:39
  • muchísimas gracias, ahi solucione, un abrazo.
    Luis Salvarezza
    viernes, 18 de marzo de 2011 0:32