Hallo zusammen,
ich stehe vor folgendem Problem:
Ich habe verschiedene UserControl, die diverse Daten darstellen. Für ein UserControl habe ich nun das gesamte DataBinding mit eigenem Eventing geschreiben und es funktioniert auch wunderbar.
Für jeden möglichen anzuzeigenden Parameter gibt es einen Eintrag in einem Dictonary, der aus der ID und einer BindingList mit den Werten zu verschiedenen Zeitpunkten besteht. Je nach UserControl fange ich die zugehörigen ListChangedEvents ab. Welche dies sind regel ich je UserControl über eine Liste, in dem die benötigten ParameterIDs stehen.
Da nicht immer alle Parameter in dem Dictonary vorkommen müssen, werden die Bindungen zur Laufzeit dynamisch erstellt. Hierzu wurde das Dictonary um ein Eventing erweitert, dass mir mitteilt, wenn ein neuer Eintrag hinzugefügt wird.
Das funktioniert jetzt wie gesagt in einem UserControl wunderbar. Also dachte ich mir, es wäre ja sinnvoll die gesamte Funktionalität der Bindung in eine Klasse auszulagern und dann in den jeweiligen Controls nur die ParameterID-Liste anzupassen und natürlich die Funktion zu überschreiben, die dann die GUI-Elemente befüllt.
Lagere ich das ganze aber aus, so werden meine DataBindings nicht mehr durchgeführt.
Hier noch die -wie ich glaube- wichtigsten Code-Zeilen:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| private List<int> parameterIDs = new List<int>();
public void init(Person person){ fillParameterIDs(); person.newParameterIDAdded += new Person.ParameterIDAddedEventHandler(parameterIDAdded); loadData(); }
private void parameterIDAdded(int newParameterID, BindingList<Parameter> valueList){ if( parameterIDs.Contains( newParameterID) ){ person.addParameterBinding( newParameterID, new ListChangedEventHandler(paramvalueAdded)); } } private void paramvalueAdded(object sender, ListChangedEventArgs e) { if (e.ListChangedType == ListChangedType.ItemAdded) { BindingList<Parameter> paramvalueList = (BindingList<Parameter>)sender; Parameter param = paramvalueList[e.NewIndex]; loadData( param ); } } |
Und in der Klasse Person ist das hinzufügen der Bindung wie folgt implementiert:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| public void addParameterBinding(int paramID, ListChangedEventHandler handler) { if (_Parameters.ContainsKey(paramID)) { _Parameters[paramID].ListChanged += handler; } } |
Irgendwie lässt sich das so also nicht vererben? Kann das seiin, oder mache ich einfach irgendetwas falsch? Und kann man eine Methode markieren, dass sie im Falle einer vererbung überschrieben werden muss?
Vielen Dank für eure Hilfe
Määx
EDIT: ok, habs gelöst - hatte scheinbar irgendwelche Pointer falsch übergeben und dadurch ist dann alles schief gelaufen.