Ich versuche ein DateTimePicker - Objekt zu bekommenFüllen Sie den Standardtext (Wählen Sie ein Datum aus), wenn kein Datum aus der Datenbank zurückgegeben wird. Wenn ein Datum in der Datenbank vorhanden ist, wird das Feld mit diesem Datum gefüllt.
Ich schreibe Code, der zwei Wege bindetSelectedDate-Option für eine DateTime-Eigenschaft im CodeBehind. Es funktioniert ordnungsgemäß und füllt das Feld mit 01/01/0001, da dies die Null von DateTime-Objekten ist. Ich habe versucht, es in eine OneWayToSource zu ändern und das Datum einfach zu binden, wenn es größer als 01/01/0001 ist.
Irgendein Vorschlag?
Vielen Dank für die Hilfe! Hier ist die Lösung, die ich gefunden habe.
[ValueConversion(typeof(DateTime), typeof(DateTime))]
class DateTimeNullConverter: IValueConverter
{
public object Convert (object value, Type targetType, object parameter, Culture culture)
{
if (value != null)
{
DateTime dateTime = (DateTime)value;
if (dateTime.Year.ToString == "1")
return null;
else
return dateTime;
}
else
{
return null;
}
}
public object ConvertBack (object value, Type targetType, object parameter, Culture culture)
{
DateTime convertDateTime;
if (value == null)
{
convertDateTime = new DateTime();
}
else
{
convertDateTime = (DateTime) value;
}
return convertDateTime;
}
}
Antworten:
0 für die Antwort № 1Erstellen Sie einen DateBlankConverter-Konverter, der an dasselbe Steuerelement bindet:
<DatePicker x:Name="DatePickerInstance"
Visibility="{Binding ElementName=DatePickerInstance,
Converter={StaticResource DateBlankConverter}, ConverterParameter={Binding Date}}"/>
Überprüfen Sie im Konverter, ob das Datum null ist, um den DatePicker ein- oder auszublenden oder die gewünschte Eigenschaft zu ändern.
0 für die Antwort № 2
Sie könnten mit etwas Code im Setter und Getter Ihres Eigentums versuchen
private DateTime? _date;
public DateTime? Date
{
get
{
if (null == _date)
{
//Set some initial value
//or just return some default value without setting the property
}
return _date;
}
set
{
if (value != _date)
{
_date = value;
this.OnPropertyChanged("Date");
}
}
}
0 für die Antwort № 3
Vielen Dank für die Hilfe! Hier ist die Lösung, die ich gefunden habe.
[ValueConversion(typeof(DateTime), typeof(DateTime))]
class DateTimeNullConverter: IValueConverter
{
public object Convert (object value, Type targetType, object parameter, Culture culture)
{
if (value != null)
{
DateTime dateTime = (DateTime)value;
if (dateTime.Year.ToString == "1")
return null;
else
return dateTime;
}
else
{
return null;
}
}
public object ConvertBack (object value, Type targetType, object parameter, Culture culture)
{
DateTime convertDateTime;
if (value == null)
{
convertDateTime = new DateTime();
}
else
{
convertDateTime = (DateTime) value;
}
return convertDateTime;
}
}