none
Binding verselbständigt sich ungewollt RRS feed

  • Frage

  • Hallo,

    mal wieder ein Binding-Problem:

    Ich habe eine TextBox (ein selbstgebautes NumericUpDown) numPositionX ab eine Eigenschaft Position.X gebunden.
    Position.X habe ich mit einem NotifyChanched-Ereignis verbunden.
    Weiterhin habe ich ein verschiebbares Thumb-Objekt (drag'n drop). Wenn dieses Thumb-Objekt verschoben wird, dann wird in der DragDelta-Methode Position.X angepasst (Position.X = newHorizantal / factorWorkPlate;), was wiederum in numPositionX angezeigt wird.
    Wenn der User den Wert in numPositionX ändert (numPositionX_ValueChanged-Methode), so wird das Thumb-Objekt entsprechend an die Positzion X verschoben. 

    Was auf meiner GUI passiert ist, dass das Thumb-Objekt beim ziehen vom Mauszeiger abhaut und wo anders dargestellt wird. Der Wert in numPositionX entsprecht dann dem des Thumb-Objektes, nicht der Mausposition.

    Dieses unkontrolierte Verhalten passiert aber nicht, wenn ich irgendwo einen Breakpoint einbaue, dann verhält es sich so, wie man es sich vorstellen möchte: Wert von numPositionX und Thumb bewegen sich in Abhängigkeit voneinander.

    Ich nehme an, dass durch die gegenseitigen Abhängigkeiten von Position.X, numPositionX und dem Thumb-Objekt es zu einer "Kettenreaktion" kommt. Die Berechnungen verselbständigen sich und liefern falsche Ergebnisse.
    Denkt ihr auch, dass dies wahrscheinlich ist?

    Wie kann man mit diesem Problem umgehen, dass zwei GUI-Objekte mit der selben Eigenschaft Position.X arbeiten, ohne dass es sich verselbständigt?

    Grüße!
    Frank


    www.energiewende-mach-ich-selbst.de


    • Bearbeitet frank me Mittwoch, 23. Juli 2014 10:18
    Mittwoch, 23. Juli 2014 10:02

Antworten

  • Hi Frank,

    frag im numValue_Changed Event ab ob das NumericUpDown den Focus hat (Benutzer Eingabe) und ändere nur dann den Wert von dem Tumb-Objekt.

    MFG

    Björn

    • Als Antwort markiert frank me Mittwoch, 23. Juli 2014 16:05
    • Tag als Antwort aufgehoben frank me Mittwoch, 23. Juli 2014 16:53
    • Als Antwort markiert frank me Donnerstag, 24. Juli 2014 07:12
    Mittwoch, 23. Juli 2014 15:41

Alle Antworten

  • Hi Frank,

    frag im numValue_Changed Event ab ob das NumericUpDown den Focus hat (Benutzer Eingabe) und ändere nur dann den Wert von dem Tumb-Objekt.

    MFG

    Björn

    • Als Antwort markiert frank me Mittwoch, 23. Juli 2014 16:05
    • Tag als Antwort aufgehoben frank me Mittwoch, 23. Juli 2014 16:53
    • Als Antwort markiert frank me Donnerstag, 24. Juli 2014 07:12
    Mittwoch, 23. Juli 2014 15:41
  • Das funktionierte anfangs gut,
    ich konnte das Thumb-Objekt schön verschieben und das NumericUpDown hat die entsprechenden Werte angezeigt. Ich konnte das NumericUpDown bedienen und das Thumb-Objekt bewegte sich entsprechend.

    Wenn ich nun das Thumb-Objekt wieder mit der Maus verschieben will, dann ruckelt es wieder.
    Der Fokus liegt dann immer noch auf dem NumericUpDown

    Der Versuch den Fokus bewusst an eine andere Stelle zu setzen scheitert, z.B. auf das Thumb-Objekt oder auf einen beliebigen Button. 
    Fehlermeldung:

    Einer Eigenschaft oder einem Indexer "System.Windows.UIElement.IsFocused" kann nichts zugewiesen werden -- sie sind schreibgeschützt.

    ?!?


    www.energiewende-mach-ich-selbst.de

    Mittwoch, 23. Juli 2014 17:00
  • Wundert mich jetzt ein bisschen, ich wäre jetzt davon ausgegangen das das Thumb den Focus hat.

    Na nimm da DragStarted Event vom Thumb und ruf die Focus Methode des Thumbs auf. Das sollte den Focus auf das Thumb setzen.

    Mittwoch, 23. Juli 2014 17:09
  • Das habe ich versucht, genau so wie du es schreibst. 
    Aber auch dort die selbe Fehlermeldung "...schreibgeschützt"?!

    www.energiewende-mach-ich-selbst.de

    Mittwoch, 23. Juli 2014 17:13
  • Nicht IsFocused = true , setzen das Funktioniert nicht. Sondern myThumb.Focus() aufrufen.
    Mittwoch, 23. Juli 2014 17:27
  • Habe beides mit selben (obigen)  Ergebnis getestet. 

    www.energiewende-mach-ich-selbst.de

    Mittwoch, 23. Juli 2014 17:38
  • Hi grade noch mal nachgeschaut, das Thumb kann nur den Maus Fokus und nicht den Keybord Fokus bekommen.

    Probiere mal den bei Mous Enter (Thumb) den Focus bei einen Controll zu setzen welches auch den Keyboard Focus haben kann.

    Mittwoch, 23. Juli 2014 18:22
  • Hi Björn,

    das hatte ich gestern schon einmal versucht, da klappte es nicht,
    heute habe ich es nochmal probiert und es klappt.

    void thumbToSet_DragStarted(object sender, DragStartedEventArgs e) { btnTipMeasurementCancel.Focus(); }

    private void NUM_ValueChanged(object sender, RoutedPropertyChangedEventArgs<decimal> e)
    {
        NumericUpDown num = (NumericUpDown)sender;
                if (num.IsFocused) . . .

    Danke Björn für deine Hilfe!!! :)


    www.energiewende-mach-ich-selbst.de



    • Bearbeitet frank me Donnerstag, 24. Juli 2014 07:11
    Donnerstag, 24. Juli 2014 07:07