Laden...

[erledigt] DatePicker benutzt unterschiedliche Formate für Anzeige und Validierung

Erstellt von DaKine vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.268 Views
D
DaKine Themenstarter:in
2 Beiträge seit 2019
vor 4 Jahren
[erledigt] DatePicker benutzt unterschiedliche Formate für Anzeige und Validierung

Hallo Zusammen,

ich realisiere zum ersten mal ein größeres Projekt mit WPF. Jetzt ärgert mich gerade der DatePicker. Dieses Steuerelemente hab ich jetzt schon an mehreren Stellen eingesetzt und es funktioniert dort wie gewollt.

Aktuell implementiere ich eine Filterauswahl für eine Liste. (Datum von ... bis ...) Hier hab ich zwei DatePicker eingesetzt:


<StackPanel Orientation="Vertical" Margin="10,0,0,0">
   <Label>Von:</Label>
   <DatePicker Text="{Binding Path=FilterVon, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</StackPanel>
<StackPanel Orientation="Vertical" Margin="10,0,0,0">
   <Label>Bis:</Label>
   <DatePicker Text="{Binding Path=FilterBis, StringFormat='dd.MM.YYYY', Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</StackPanel>

Das mit dem StringFormat beim zweiten DatePicker war nur ein Versuch. Funktioniert weder mit noch ohne.

Im Quellcode lege ich als Startwert für die beiden Eigenschaften den 1.1. des aktuellen Jahres und das aktuelle Datum fest.


            FilterVon = new DateTime(DateTime.Now.Year, 1, 1);
            FilterBis = DateTime.Now.Date;

Im DatePicker wird das Datum im Format dd.MM.yyyy angezeigt. Wenn ich dann zum Beispiel den 13.01.2019 auswähle, umrandet er mir die TextBox rot. Wähle ich einen Tag < 12 aus, ist wieder alles okay. Meine Schlussfolgerung: Er validiert das Datum mit dem Format MM.dd.YYYY und das schlägt für den 14.01.2019 fehl, weil es keinen 13. Monat gibt.

Bei FilterBis genaus das gleiche. Da trägt er mir das aktuelle Datum gar nicht ein und umrandet das Kästchen rot, weil es den Monat 28 gar nicht gibt.

Kann mir jemand sagen, wo ich da ansetzen muss zur Fehlerbehebung. Ich bin nach langer Suche und rumprobiererei schon etwas entnervt von der Sache 😦

Vielen lieben Dank an alle Helfer.

Nachtrag: Wenn ich mit Strings arbeite anstatt mit DateTime dann funktioniert es. Aber dann weiß ich nicht, wie ich das mit dem Filtern meine Liste machen soll.


                filterliste = m_anlieferungenListe
                    .Where(k => k.Kundenname.Contains(m_filterKundenname))
                    .Where(k => k.Startzeit.CompareTo(m_filterVon) > 0)
                    .Where(k => k.Startzeit.CompareTo(m_filterBis) < 0);

U
69 Beiträge seit 2019
vor 4 Jahren

Hallo DaKine,

du musst das Binding auf "SelectedDate" und nicht auf "Text" setzen.
Dann sollte es funktionieren.

“Knowledge cannot replace friendship. I'd rather be an idiot than lose you.”

  • Patrick to Spongebob
D
DaKine Themenstarter:in
2 Beiträge seit 2019
vor 4 Jahren

Ja gut, okay, das macht auch Sinn.
Vielen Dank fürs Brett vorm Kopf beseitigen.