C# Xaml转换器和显示;选择一个日期";在日期时间选择器中
在wpf应用程序中,我绑定了一些dateTimePicker。 我想创建一个转换器,以便在日期为31/12/2999时在dateTilmePicker中显示著名的行“选择日期” 我创建了一个转换器:C# Xaml转换器和显示;选择一个日期";在日期时间选择器中,c#,.net,wpf,xaml,converter,C#,.net,Wpf,Xaml,Converter,在wpf应用程序中,我绑定了一些dateTimePicker。 我想创建一个转换器,以便在日期为31/12/2999时在dateTilmePicker中显示著名的行“选择日期” 我创建了一个转换器: public class DateConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globaliza
public class DateConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null)
return DateTime.MinValue;
if (((DateTime)value).ToShortDateString() == "31/12/2999")
return DateTime.MinValue;
DateTime returnVal;
if (DateTime.TryParse(value.ToString(), out returnVal))
{
if (returnVal != DateTime.MinValue)
return returnVal;
else
return DateTime.MinValue;
}
else
return DateTime.MinValue;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null)
return DateTime.MinValue;
DateTime val;
if (value.ToString() == "31/12/2999")
return DateTime.MinValue;
if (DateTime.TryParse(value.ToString(), out val))
return val;
else
return DateTime.MinValue;
}
}
这是我的XAMl:
<DatePicker x:Name="DateTimePicker_Date" Text="{Binding RelativeSource={RelativeSource Self}, Converter={StaticResource DateConverter}, Path=SelectedDate, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, TargetNullValue='', ValidatesOnDataErrors=False}"/>
我的问题是,当我的日期是2999年12月31日时,DateTimePicker中写入的值是“01/01/0001”,而不是著名的句子“选择日期”
有人有什么想法吗
非常感谢
致以最良好的祝愿
Nixeus代码片段
if (((DateTime)value).ToShortDateString() == "31/12/2999")
return DateTime.MinValue;
应改为
if (((DateTime)value).ToShortDateString() == "31/12/2999")
return "select a date";
在您的
Convert
方法中。这里我更改了转换器,用于测试所选日期低于或等于今天的日期,然后只返回日期,否则返回null
因此,当我们将DatePicker的SelectedDate属性返回null时,它将触发附加的触发器并将文本设置为选择日期
<DatePicker x:Name="datepicker" Text="{Binding RelativeSource={RelativeSource Self}, Converter={StaticResource DateConverter}, Path=SelectedDate, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=False}">
<DatePicker.Style>
<Style TargetType="DatePicker">
<Style.Triggers>
<Trigger Property="SelectedDate" Value="{x:Null}">
<Setter Property="Text" Value="Select A Date"/>
</Trigger>
</Style.Triggers>
</Style>
</DatePicker.Style>
</DatePicker>
public class DateConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null)
return null;
if (((DateTime)value).ToShortDateString() == "31/12/2999")
return null;
DateTime returnVal;
if (DateTime.TryParse(value.ToString(), out returnVal))
{
if (returnVal <= DateTime.Today) // to check only
return returnVal;
//else if (returnVal != DateTime.MinValue)
// return returnVal;
else
return null;
}
else
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null)
return null;
DateTime val;
if (value.ToString() == "31/12/2999")
return null;
if (DateTime.TryParse(value.ToString(), out val))
return val;
else
return null;
}
}
公共类日期转换器:IValueConverter
{
公共对象转换(对象值、类型targetType、对象参数、System.Globalization.CultureInfo区域性)
{
如果(值==null)
返回null;
如果(((日期时间)值).ToSortDateString()=“31/12/2999”)
返回null;
日期时间返回值;
if(DateTime.TryParse(value.ToString(),out returnVal))
{
if(returnVal这只能在xaml中完成。无需编写转换器。我甚至删除了文本绑定
<DatePicker x:Name="DateTimePicker_Date">
<DatePicker.Style>
<Style TargetType="DatePicker">
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=SelectedDate}" Value="31/12/2999">
<Setter Property="SelectedDate" Value="{x:Null}" />
</DataTrigger>
</Style.Triggers>
</Style>
</DatePicker.Style>
</DatePicker>
另外,请确保您的日期格式正确(31/12/2999 vs 12/31/2999)