Pregunta

Tengo un control personalizado (Windows Form) que es un cuadro de texto de búsqueda. Una propiedad en el Control es la Selección actual que es un Objeto personalizado que contiene " Identificador " ;, " Código " y " Descripción " ;. Esta propiedad es Databound usando un BindingSource.

Mostrar la información funciona muy bien. Por otro lado, independientemente de si configuro la Actualización a OnValidate o OnValueChange, nunca se actualiza el BindingSource. ¿Hay algo que me esté perdiendo para que esto se actualice automáticamente?

private System.Windows.Forms.BindingSource buildPlanComponentDataBindingSource;

    public void LoadBuildPlan(string itemNumber)
    {
        var buildPlanComponents = BuildPlan.LoadBuildPlanComponents(itemNumber, AutomaticPrice);
        buildPlanComponentDataBindingSource.DataSource = buildPlanComponents;
        AssemblyNumber = itemNumber;
    }




[Bindable(true)]
[DefaultValue(null)]
public ILookupSelection CurrentSelection
{
    get
    {
        if (currentSelection == null)
            currentSelection = new LookupSelection {Code = txtLookup.Text};

        return currentSelection;
    }

    set
    {
        if (value == null) return;

        currentSelection = value;

        SetText(currentSelection, DisplayText);
        SetDescription(currentSelection, DisplayDescription);
    }
}
¿Fue útil?

Solución

¡La implementación de INotifyPropertyChanged parece ser la solución!

    #region IPropertyChanged

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(string propertyName)
    {
        OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
    }

    protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
    {
        if (null != PropertyChanged)
        {
            PropertyChanged(this, e);
        }
    }

    #endregion

Otros consejos

  

Viendo la información funciona   genial. Por otro lado independientemente de   Si configuro la actualización a OnValidate   o OnValueChange nunca actualiza el   BindingSource.

Mirando tu código no estoy realmente seguro de esto. En su conjunto, prueba nulo y abandono; Si los datos realmente contienen un valor nulo (que es lo que está describiendo), su control no estará sincronizado. Me pregunto si tal vez esa comprobación esté enmascarando el problema subyacente.

¿Quizás deba hacer que el enlace de datos escriba su valor para cada control cuyo valor está configurando de esta manera?

Suponiendo un enlace de datos para un cuadro de texto llamado txtMySetValue:

txtMySetValue.DataBindings [0] .WriteValue ();

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top