none
UserControl con propiedad 'bindable' no funciona si se llama Text. RRS feed

  • Pregunta

  • Hola:

    Tengo un Usercontrol donde tengo una propiedad 'bindable' llamada Text que no funciona. Si le cambio el nombre a (por ejemplo) Texto, entonces si que funciona. Me gustaría 'saber' la razón de esto, gracias.

    Código del UserControl, contiene solo un TextBox (TextBox1):

    Imports System.ComponentModel
    
    ''' <summary>
    ''' UserControl que contiene un TEXTBOX (TextBox1)
    ''' </summary>
    Public Class UC_TextPropertyProblema
        Implements INotifyPropertyChanged
    
        Public ReadOnly Property PropiedadText As String = "Text"  ' Si cambio "Text" por "Texto" funciona
    
        ''' <summary>
        ''' Si la propiedad se llama TEXT, no funciona!!!
        ''' Si la propiedad se llama TEXTO (o cualquier otro nombre), si funciona.
        ''' </summary>
        ''' <returns></returns>
        <Bindable(True)>
        Public Overrides Property Text As String ' Si cambio Text por Texto funciona
            Get
                Return Me.TextBox1.Text
            End Get
            Set(value As String)
                Me.TextBox1.Text = value
                OnPropertyChanged(PropiedadText)
            End Set
        End Property
    
        Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
    
        Protected Sub OnPropertyChanged(ByVal name As String)
            RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(name))
        End Sub
    
        Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
            OnPropertyChanged(PropiedadText)
        End Sub
    End Class

    Ejemplo para probar el control, creamos un formulario con un DataGridView1, un boton (btnSave), y 2 UserControls (noTxtBoxId, noTxtBoxTXT):

    Public Class TestBinding
        Dim dt As New DataTable
        Dim bs As BindingSource
    
        Private Sub TestBinding_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            dt.Columns.Add("Id", GetType(Integer))
            dt.Columns.Add("TXT", GetType(String))
    
            dt.Rows.Add(1, "Row1")
            dt.Rows.Add(2, "Row2")
    
            bs = New BindingSource(dt, "")
    
            noTxtBoxId.DataBindings.Add(noTxtBoxId.PropiedadText, bs, "Id")
            noTextBoxTXT.DataBindings.Add(noTxtBoxId.PropiedadText, bs, "TXT")
    
            Me.DataGridView1.DataSource = bs
        End Sub
    
        Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
            bs.EndEdit()
        End Sub
    End Class

    Cuando la propiedad del Usercontrol se llama Texto, hacer un cambio en los TextBox del Usercontrol y luego pulsando el botón, te cambia la info que se muestra en el Grid.

    Pero si la propiedad se llama Text, no lo hace, ¿porque?

    Un saludo

    jueves, 6 de agosto de 2020 12:17

Respuestas

  • Prueba a poner estos atributos.

    <EditorBrowsable(EditorBrowsableState.Always)> _
    <Browsable(true)> _
    <DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)> _
    <Bindable(true)>


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    • Marcado como respuesta EricRRModerator sábado, 29 de agosto de 2020 0:28
    sábado, 8 de agosto de 2020 7:08

Todas las respuestas

  • Hola puede que alla un conflicto con la propiedad Text de la clase ContainerControl la clase UserControl hereda de la clase ContainerControl la cual tiene una propiedad Text puede que no te muestre nada porque reconoce la la propiedad Text que le estas pasando como la misma que ya trae esta clase y como dicha propiedad no tiene ningun valor por eso no te muestra nada claro todo esto es una suposicion mia pero ese puede ser el caso

    jueves, 6 de agosto de 2020 12:55
  • Hola LG DES, 

      

    ¿Alguna novedad sobre la consulta realizada? ¿Han sido útiles las  respuestas proporcionadas?  

    Espero su respuesta.  

    Cualquier duda referente a productos Microsoft, puedes consultarnos. Es un gusto informarte. 

    Gracias por usar los foros de MSDN.  

    Eric Ruiz

    ____________________________  

     

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.  

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.   

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft. 

    jueves, 6 de agosto de 2020 15:44
    Moderador
  • Hola:

    Entiendo que van por ahí los tiros, el Intellisense te 'sugiere' que uses Overrides para la propiedad Text, pero ni así funciona. He probado también Shadows, Overloads, etc. pero nada.

    La propiedad Text del UserControl funciona perfectamente (muestra y cambia los valores, etc.), lo que NO funciona es el BINDING.

    Hay un conflicto con la propiedad Text+Binding, pero 'de alguna forma' se debería poder evitar.

    Un saludo
    viernes, 7 de agosto de 2020 7:20
  • Prueba a poner estos atributos.

    <EditorBrowsable(EditorBrowsableState.Always)> _
    <Browsable(true)> _
    <DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)> _
    <Bindable(true)>


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    • Marcado como respuesta EricRRModerator sábado, 29 de agosto de 2020 0:28
    sábado, 8 de agosto de 2020 7:08