Hi an alle,
zuallererst möchte ich mich entschuldigen sollte dies doch in den Support-Thread zum WPF-Tutorial gehören, da jedoch bei Punkt 2.1.4.6 - Binding an Collections mit CollectionViewSource (genauer gesagt das Filtern) nur anhand von Text/String gezeigt wurde, und ich ja eher an DateTime denke, dachte ich, das es nicht explizit in den Support Thread gehört, falls doch, dann bitte verschieben.
Ich habe heute einige Stunden damit herumprobiert, den im Tutorial gezeigten Filter der IcollectionView anstelle von Text/String, mit einem DateTimeObject zu verwenden (rein zum testen/üben), dabei bin ich auf mehrere Hürden gestoßen.
Ein DateTimeObjekt scheint nicht Nothing sein zu können, stattdessen wird schlicht das früheste Datum verwendet (01.01.0001) was in meinem Test zu folgendem Filter geführt hat (hoffentlich nicht ganz verhunzt):
Soweit so gut, das Filtern funktioniert, aber ich vermute das es hier doch sicher einen besseren Weg gibt ? Denn verwende ich hier z.B. TwoWayBinding, zeigt mein DatePicker natürlich auch das "unangenehme" Datum an. (habe mir hier mit OneWayToSourceBinding einen nicht sehr schönen Workaround geschaffen)
Allerdings, würde ich idealerweise, eigentlich 2 DatePicker verwenden, einmal "Von" und einmal "Bis" aber, das wiederrum führt ja dazu (wenn ich richtig liege) das ich dann anhand einer TimeSpan arbeiten müsste.
Als ich noch versucht habe ohne Binding zu erbeiten, konnte ich "leichter" bestimmen was nun angezeigt werden soll und was nicht, aber da ich es nun über binding versuchen möchte, würde ich sehr gerne Fragen, wie ich das am besten lösen kann ?
Denn rein theoretisch (zumindest stelle ich es mir aktuell so vor) bräuchte ich dann ja 2 Propertys einmal für das startdatum, einmal für das Enddatum, ein weiteres für die daraus zu errechnende TimeSpan, und dann einen Filter der Feststellen kann ob das jeweilige Item unter dem Property Auftragsdatum irgendwo in diesem TimeSpan liegt.
Aber hier kommt vermutlich die Crux am ganzen, was ist denn nun, wenn ich möchte, das wenn z.B. nur ein Von-Datum eingegeben wird , alle aufträge die Ab diesem Datum dabei sind, bis hin zu einem unbestimmten Datum angezeigt werden, und dasselbe auch umgekehrt, wird also nur ein Bis-Datum angegeben, das dann nur angezeigt wird was vor diesem Datum passierte.
Ich möchte im prinzip einfach mal fragen ob ich zumindest theoretsich den richtigen Gedankenweg habe, und ich würde gerne wissen, wie ich so etwas evtl. in elegant lösen könnte, besonders bezogen auf Von-Bis.
Ich hoffe ich habe mich einigermaßen verständlich ausgedrückt.
LG
p.S. sollte die Antwort darauf irgendwo im WPF-Tutorial bereits erwähnt sein, so bitte ich tausendfach um Entschuldigung, ich versuche mich gerade ein wenig in die WPF einzuarbeiten, vor allem auf Basis des Tutorials, aber ich hatte bislang noch nicht die Zeit jedes Kapitel durchzuarbeiten.
zuallererst möchte ich mich entschuldigen sollte dies doch in den Support-Thread zum WPF-Tutorial gehören, da jedoch bei Punkt 2.1.4.6 - Binding an Collections mit CollectionViewSource (genauer gesagt das Filtern) nur anhand von Text/String gezeigt wurde, und ich ja eher an DateTime denke, dachte ich, das es nicht explizit in den Support Thread gehört, falls doch, dann bitte verschieben.
Ich habe heute einige Stunden damit herumprobiert, den im Tutorial gezeigten Filter der IcollectionView anstelle von Text/String, mit einem DateTimeObject zu verwenden (rein zum testen/üben), dabei bin ich auf mehrere Hürden gestoßen.
Ein DateTimeObjekt scheint nicht Nothing sein zu können, stattdessen wird schlicht das früheste Datum verwendet (01.01.0001) was in meinem Test zu folgendem Filter geführt hat (hoffentlich nicht ganz verhunzt):
VB.NET-Quellcode
- Function AuftragsListeViewFilter(obj As Object) As Boolean
- If AuftragsListeFilterDate = DateTime.MinValue Then Return True
- If obj IsNot Nothing Then
- Dim CurrentAuftrag As Auftrag = CType(obj, Auftrag)
- If Not CurrentAuftrag.Auftragsdatum = DateTime.MinValue Then
- Return CurrentAuftrag.Auftragsdatum.Date = AuftragsListeFilterDate.Date
- Else
- Return True
- End If
- Else
- Return True
- End If
- End Function
Soweit so gut, das Filtern funktioniert, aber ich vermute das es hier doch sicher einen besseren Weg gibt ? Denn verwende ich hier z.B. TwoWayBinding, zeigt mein DatePicker natürlich auch das "unangenehme" Datum an. (habe mir hier mit OneWayToSourceBinding einen nicht sehr schönen Workaround geschaffen)
Allerdings, würde ich idealerweise, eigentlich 2 DatePicker verwenden, einmal "Von" und einmal "Bis" aber, das wiederrum führt ja dazu (wenn ich richtig liege) das ich dann anhand einer TimeSpan arbeiten müsste.
Als ich noch versucht habe ohne Binding zu erbeiten, konnte ich "leichter" bestimmen was nun angezeigt werden soll und was nicht, aber da ich es nun über binding versuchen möchte, würde ich sehr gerne Fragen, wie ich das am besten lösen kann ?
Denn rein theoretisch (zumindest stelle ich es mir aktuell so vor) bräuchte ich dann ja 2 Propertys einmal für das startdatum, einmal für das Enddatum, ein weiteres für die daraus zu errechnende TimeSpan, und dann einen Filter der Feststellen kann ob das jeweilige Item unter dem Property Auftragsdatum irgendwo in diesem TimeSpan liegt.
Aber hier kommt vermutlich die Crux am ganzen, was ist denn nun, wenn ich möchte, das wenn z.B. nur ein Von-Datum eingegeben wird , alle aufträge die Ab diesem Datum dabei sind, bis hin zu einem unbestimmten Datum angezeigt werden, und dasselbe auch umgekehrt, wird also nur ein Bis-Datum angegeben, das dann nur angezeigt wird was vor diesem Datum passierte.
Ich möchte im prinzip einfach mal fragen ob ich zumindest theoretsich den richtigen Gedankenweg habe, und ich würde gerne wissen, wie ich so etwas evtl. in elegant lösen könnte, besonders bezogen auf Von-Bis.
Ich hoffe ich habe mich einigermaßen verständlich ausgedrückt.
LG
p.S. sollte die Antwort darauf irgendwo im WPF-Tutorial bereits erwähnt sein, so bitte ich tausendfach um Entschuldigung, ich versuche mich gerade ein wenig in die WPF einzuarbeiten, vor allem auf Basis des Tutorials, aber ich hatte bislang noch nicht die Zeit jedes Kapitel durchzuarbeiten.
If Energy = Low Then
Drink(aHugeCoffee)
Else
Drink(aHugeCoffeeToo)
End If
Drink(aHugeCoffee)
Else
Drink(aHugeCoffeeToo)
End If