RCP EMF Databinding/Undo/Redo

G

Gast2

Gast
Hallo zusammen,

mal wieder ne Frage zu Undo/Redo und dem EMF Databinding

Ich habe ein Textfeld1 wenn man in diesem was eingibt soll Textfeld 2 automatisch mit einem Wert befüllt werden. Nur leider bekommt mein ModifyListener immer den falschen Wert im Model d.h. das Model ist noch nicht geupdatet. Wenn ich ein Update einbaue bekomme ich aber zuviel undo Events nämlich für jedes Attribut, welches im Model geupdatet wird. In diesem Fall 4. Da ist natürlich auch unschön. Darum meine Frage was ist falsche?

Java:
	private void bindValue(){
		DataBindingContext bindingContext = new EMFDataBindingContext();
		bindingContext.bindValue(WidgetProperties.text(SWT.Modify).observe(textfield1),
				EMFProperties.value(MyObjectPackage.Literals.OBJECT__ATT2).observe(myObject));
		bindingContext.bindValue(WidgetProperties.text(SWT.Modify).observe(textfield2),
				EMFProperties.value(MyObjectPackage.Literals.OBJECT__ATT1).observe(myObject));
		bindingContext.bindValue(WidgetProperties.text(SWT.Modify).observe(textfield3),
				EMFProperties.value(MyObjectPackage.Literals.OBJECT__ATT3).observe(myObject));
		bindingContext.bindValue(WidgetProperties.text(SWT.Modify).observe(textfield4),
				EMFProperties.value(MyObjectPackage.Literals.OBJECT__ATT4).observe(myObject));
	textfield1.addModifyListener(new ModifyListener() {
		
		@Override
		public void modifyText(ModifyEvent e) {
//			bindingContext.updateModels();

                        // Att1 hat noch den falschen Wert
			Double double1 = myObject.getAtt1() * 0.66;
			myObject.setAtt2(double1);
			
		}
	});

	}

2. Oder sollte ich gar nicht auf das textfeld1 einen Listener setzen sondern ein Adapter als Listener auf das Model setzen und dann den wert ändern?
 
Zuletzt bearbeitet von einem Moderator:

Wildcard

Top Contributor
Wenn das Property das du in textfeld 1 darstellst abhängig vom Property aus textfeld2 ist, dann solltest du es als derived Feature im Ecore markieren und gegebenenfalls einen DerivedFeatureAdapter installieren.
Wofür du den Modify Listener brauchst ist mir schleierhaft.
 

Wildcard

Top Contributor
Übrigens, du weißt das EMF automatisch Undo/Redo beherrscht, oder? Dazu solltest du allerdings EMFEditProperties für dein Databinding verwenden, damit die einzelnen Änderungen per Command durchgeführt werden.
 
G

Gast2

Gast
Übrigens, du weißt das EMF automatisch Undo/Redo beherrscht, oder? Dazu solltest du allerdings EMFEditProperties für dein Databinding verwenden, damit die einzelnen Änderungen per Command durchgeführt werden.

Ja verwend hab das falsche stück Code gepostet
Benutze EMFEditProperties...
 
G

Gast2

Gast
Wenn das Property das du in textfeld 1 darstellst abhängig vom Property aus textfeld2 ist, dann solltest du es als derived Feature im Ecore markieren und gegebenenfalls einen DerivedFeatureAdapter installieren.
Wofür du den Modify Listener brauchst ist mir schleierhaft.

Das textfeld2 wird aus textfeld 1 und einem double wert welche variabel ist berechnet...

Wofür du den Modify Listener brauchst ist mir schleierhaft.


ja weil mir nichst anderes einfiel wie auf änderungen in textfeld1 reagier kann... Außer halt auf die Model werte...
 

Wildcard

Top Contributor
Du machst doch aber ein Binding zwischen allen Textfeldern und Properties in deinem Modell. Die Beziehung zwischen Textfeld 1 und Textfeld 2 besteht also nicht nur auf GUI Ebene, sondern im Modell, richtig?
Wenn das der Fall ist, dann solltest du wie gesagt mit derived Features arbeiten die sich zB selbst berechnen.
 

Ähnliche Java Themen


Oben