Laden...

WPF DatePicker und 01.01.1900 ausblenden

Erstellt von m.grauber vor 12 Jahren Letzter Beitrag vor 12 Jahren 3.324 Views
M
m.grauber Themenstarter:in
343 Beiträge seit 2010
vor 12 Jahren
WPF DatePicker und 01.01.1900 ausblenden

Hallo,

überall sind Workarounds zu lesen, wie man den Text "Datum auswählen" kompliziert ausblenden kann.

Mein Problem ist hoffentlich einfacher, aber ich weiß nicht wo ich anfangen soll:

In der SQL-DB ist das Feld fürs Datum vom Typ Datetime (not null) und kann von mir auch nicht geändert werden. Daher befindet sich auch in der entsprechenden Klasse der Wert 01.01.1900 (und soll es auch bleiben).

Im WPF-DatePicker soll statt des 01.01.1900 immer ein leerer Wert angezeigt werden und wenn ein Datum herausgelöscht wird (im Datepicker auch leer bleiben), aber der 01.01.1900 in die Datenbank geschrieben werden. Das WPF-DatePicker ist per Binding gebunden.

Setze ich wenn der Text="" im SelectedDateChanged ist, manuell in der Klasse den 01.01.1900, dann wird das zwar gemacht, jedoch wird dieser Wert durch das Two-Way-Binding sofort wieder im DatePicker angezeigt. 🙁

Wo und wie kann ich hier ansetzen? 🤔

Vielen Dank!

Mfg
Michael

PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!

:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]

1.552 Beiträge seit 2010
vor 12 Jahren

Hallo m.grauber,

ich mach das immer mit einem von mit so genannten Wrapper.
Jedoch liegt bei mir das Problem daran dass ein datum das DateTime und nicht DateTime? in der Datenbank ist, in der GUI als 01.01.0001 angezeigt wird. Ziemlich nervig, da mann nicht ohne weiteres wieder zum aktuellen Datum kommt und man nicht möchte dass das akutelle Datum ausgewählt sei. Ich mach das dann immer so:

public DateTime? StartDateWrapper
{
    get
    {
        if(meinObj.StartDate == DateTime.MinValue)
            return null;
        return meinObj.StartDate;
    }
    set
    {
        meinObj.StartDate = value.GetValueOrDefault();
    }
}

Dementsprechend müsste es ein Leichtes sein, mein Beispiel deinen Bedürfnissen anzupassen

Gruß
Michael

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

C
112 Beiträge seit 2009
vor 12 Jahren

Wie sieht es denn mit Datenbindung aus? Dann ließe sich über einen Converter das ganze schön lösen:


public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {			
			if (value is DateTime) {
				DateTime dt = (DateTime)value;
				if(dt == DateTime.MaxValue || dt == DateTime.MinValue){
					return DependencyProperty.UnsetValue;
				}
			}
			return value;
		}

edit: DateTime.MinValue || DateTime.MaxValue natürlich durch entsprechenden Wert ersetzen...

M
m.grauber Themenstarter:in
343 Beiträge seit 2010
vor 12 Jahren

Hallo Muro und Chriscolm,

danke vielmals für Eure Tipps! 👍 👍 Hat jetzt wirklich lange bei mir gedauert. 😭 Ich habe es erst mit dem Wrapper versucht, aber irgendwie nicht hinbekommen.

Der Converter ist auch eine sehr gute Idee. Isoliert hat es damit geklappt (natürlich noch ConvertBack dazu und leicht anpassen).

Leider arbeite ich mit einem vererbten DatePicker aus einer anderen dll und dadurch wird es etwas komplizierter und ich hänge noch an einer anderen Stelle.

Im Verhalten von DatePicker=null und Datepicker=DependencyProperty.UnsetValue habe ich kein Unterschied feststellen können. Welchen davon sollte man verwenden?

Danke!

Grüße

Mfg
Michael

PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!

:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]

1.552 Beiträge seit 2010
vor 12 Jahren

Ich würd null nehmen, denn DependencyProperty.UnsetValue ist laut Dokumentation für etwas anders zuständig.

UnsetValue wird statt null verwendet, da null ein gültiger Eigenschaftswert sein könnte sowie ein gültiger (und häufig verwendeter) DefaultValue.

In deinem Moment ist null ein gültiger Eigenschaftswert.

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp