Encuadernación de un control personalizado
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);
}
}
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 ();