none
Warum feuert der SelectedDateChanged-Event beim DatePicker zweimal ? RRS feed

  • Frage

  • Hallo zusammen,

    wenn ich bei einem DatePicker das Datum direkt eintrage, wird der SelectedDateChanged-Event zweimal ausgelöst. Das ist natürlich Blödsinn und deshalb würde ich gern wissen, mit welcher Einstellung ich das verhindern kann ?

    Zum Reproduzieren dieses fehlerhaften Verhaltens:

    - ein neues Projekt "WPF-Anwendung" anlegen (.NET Framework 4)

    - aus der Toolbox den "Datepicker" ins MainWindow ziehen

    - einen Doppelclick auf dieses Control ausführen (-> erzeugt neue Methode 'datePicker1_SelectedDateChanged...' in der Codebehind-Datei

    - dort folgenden Code eintragen: System.Diagnostics.Debug.WriteLine("hier Event");

    - Projekt kompilieren (<F6>)und starten (<F5>)

    - im angezeigten Feld (noch steht "Datum auswählen" drin) ein beliebiges Datum eingeben: 01.01.2000 und <ENTER> drücken

    ---> im Ausgabefenster erscheint "hier Event" zweimal untereinander !

    Also nocheinmal meine Frage: Mit welcher Einstellung kann ich dieses Fehlverhalten unterbinden ?

    MfG

    Paul Schneider

    Mittwoch, 11. April 2012 10:54

Antworten

  • Hallo Paul

    Das Verhalten kann ich reproduzieren.
    Ursache ist vermutlich das beim manuellen Setzen des Datums in der TextBox zuerst die "Text"-Property des DatePickers aktualisiert wird und
    dann, wenn das Datum gültig ist, die "SelectedDate"-Property.
    Beide scheinen das Event zu feuern.
    Ich wüsste nicht, wie man es unterbinden kann.
    Ist wohl als Bug einzustufen, das ein Change gefeurt wird, wenn sich gar nichts ändert.
    Zur Abhilfe könntest Du mit DataBinding arbeiten und die "SelectedDate" Property des Controls an eine Property deines Datenobjekts binden. Beim Binding an SelectedDate wird nur jeweils einmal pro Änderung gefeuert.
    Es ginge auch, sich den letzten Wert zu merken und was immer du im EventHandler machst, nur auszuführen, wenn der neue Wert vom alten
    abweicht.

    Christoph
    Mittwoch, 11. April 2012 22:33

Alle Antworten

  • Hallo Paul

    Das Verhalten kann ich reproduzieren.
    Ursache ist vermutlich das beim manuellen Setzen des Datums in der TextBox zuerst die "Text"-Property des DatePickers aktualisiert wird und
    dann, wenn das Datum gültig ist, die "SelectedDate"-Property.
    Beide scheinen das Event zu feuern.
    Ich wüsste nicht, wie man es unterbinden kann.
    Ist wohl als Bug einzustufen, das ein Change gefeurt wird, wenn sich gar nichts ändert.
    Zur Abhilfe könntest Du mit DataBinding arbeiten und die "SelectedDate" Property des Controls an eine Property deines Datenobjekts binden. Beim Binding an SelectedDate wird nur jeweils einmal pro Änderung gefeuert.
    Es ginge auch, sich den letzten Wert zu merken und was immer du im EventHandler machst, nur auszuführen, wenn der neue Wert vom alten
    abweicht.

    Christoph
    Mittwoch, 11. April 2012 22:33
  • Hallo Christoph,

    Danke für deine 'Anteilnahme' ;-) ...

    habe es jetzt über deinen zweiten Vorschlag realisiert, ist halt ne Krücke - aber das Ergebnis zählt.

    viele Grüße

    Paul

    Freitag, 13. April 2012 09:01
  • Hallo Paul

    Freut mich dass Du eine Lösung gefunden hast.
    Btw: Meine Anteilnahme ist wirklich aufrichtig... ;-)

    Gruß,
    Christoph

    Mittwoch, 18. April 2012 22:13