2009-03-03 20 views
7

Ich habe ein benutzerdefiniertes Steuerelement (Windows Form), das ein Nachschlagetextfeld ist. Eine Eigenschaft in der Steuerung ist die aktuelle Auswahl, bei der es sich um ein benutzerdefiniertes Objekt handelt, das "Bezeichner", "Code" und "Beschreibung" enthält. Diese Eigenschaft verwendet Databound mit einer BindingSource.Datenbindung eines benutzerdefinierten Steuerelements

Anzeige der Informationen funktioniert super. Auf der anderen Seite, unabhängig davon, ob ich das Update auf OnValidate oder OnValueChange setze, aktualisiert es nie die BindingSource. Gibt es etwas, das ich vermisse, um dies zum automatischen Update zu bekommen?

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); 
    } 
} 
+0

Können Sie uns den Code zeigen, wo Sie die Datenbindung erstellen? – overslacked

+0

Danke, deine Frage war sehr hilfreich. Aus irgendeinem Grund hat das MSDN-Lernprogramm das Attribut [Bindable (true)] aus seinem Lernprogramm weggelassen. Das ist ein wichtiges Detail! –

Antwort

2

Implementierung von INotifyPropertyChanged scheint die Lösung zu sein!

+0

IPropertyChanged sollte INotifyPropertyChanged lesen. Ich kopierte den Code und wurde durch dieses Detail beim Definieren der Vererbung getäuscht. Ansonsten ist das großartig, +1 – Marcel

0

die Informationen angezeigt arbeitet groß. Auf der anderen Seite, unabhängig von ob ich das Update auf OnValidate oder OnValueChange es eingestellt nie aktualisiert das Binding.

Mit Blick auf Ihren Code bin ich mir eigentlich nicht sicher. In Ihrem Set testen Sie auf Null und geben es auf; Wenn die Daten tatsächlich null enthalten (was Sie beschreiben), ist Ihr Steuerelement nicht mehr synchron. Ich frage mich, ob diese Überprüfung vielleicht das zugrundeliegende Problem maskiert.

+0

Die einzige Zeit, die wirklich nie NULL ist, ist, wenn das Steuerelement anfänglich erstellt wird. Ansonsten wird dies nur eingestellt, wenn eine Auswahl getroffen wird, die einen Wert enthält. – ejmack

+0

Wenn das der Fall ist, würde ich empfehlen, dass Sie ein anderes Flag verwenden, um zu testen, außer Wert == null. Die Datenbindung an Eigenschaften ist ein hin und her Prozess ... auf jeden Fall würde ich dieses Bit säubern, aber ich bin auch nicht sicher, dass es Ihrem Problem am Ende helfen wird. – overslacked

0

Vielleicht müssen Sie veranlassen, dass die DataBinding ihren Wert für jedes Steuerelement schreibt, dessen Wert Sie auf diese Weise festlegen?

Angenommen, man Daten für eine Textbox Bindung genannt txtMySetValue:

txtMySetValue.DataBindings [0] .WriteValue();

Verwandte Themen