我正在尝试使用Converter
撰写IValueConverter
。
我要做的是允许用户在DataGRid
中输入1到4位数的数字,并以24小时时间格式表示时间。
这是我到目前为止的代码,当在虚拟方法(不是转换器)中使用虚拟值进行测试时,它会返回所需的日期+时间。
public class ReturnDateConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
DateTime result = new DateTime();
var param = parameter as string;
if (string.IsNullOrEmpty(param) || value == null) return result;
if (param.Length > 4) return result;
var date = DateTime.Parse(value.ToString());
var pad = param.PadLeft(4, '0');
string[] t = pad.Select(s => s.ToString()).ToArray();
var newTime = new TimeSpan(int.Parse(t[0] + t[1]), int.Parse(t[2] + t[3]), 0);
if (newTime.Minutes == 1) return result;
var timestring = date.Date + newTime;
result = timestring;
return result;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
和XAML,
<UserControl.Resources>
<local:ReturnDateConverter x:Key="ReturnDateConverter"/>
</UserControl.Resources>
<DataGridTemplateColumn Header="退勤" Width="90" SortMemberPath="Date_Data">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=TimeDataTwo, StringFormat={}{0:hh:mm}, UpdateSourceTrigger=LostFocus}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<xctk:DateTimeUpDown Minimum="{Binding Path=TimeDataTwo}"
Maximum="{Binding Path=TimeDataTwo,
Converter={StaticResource ReturnDateConverter},
ConverterParameter=1}"
Format="ShortTime"
Value="{Binding Path=TimeDataTwo,
StringFormat={}{0:hh:mm},
UpdateSourceTrigger=LostFocus}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
转换器触发但是,我似乎总是得到结果minvalue
的{{1}},并且由于没有值存在,它会退出此行DataTime
上的代码。
任何帮助都将不胜感激。
由于已经有答案而没有更改问题,我取出了if (newTime.Minutes == 1) return result;
,现在我只在这里获得ConverterParameter=1
值null
???
答案 0 :(得分:1)
第一期
您将ConverterParameter=1
传递给转换器并解析此版本而不是value
。
<强>更新强>
查看DateTimeUpDown
提供的可能性,您可以尝试AllowTextInput
并使用所需的格式字符串指定Format="Custom"
:
<xctk:DateTimeUpDown Format="Custom"
FormatString="H:mm"
AllowTextInput="true"
Value="{Binding Path=TimeDataTwo, StringFormat={}{0:hh:mm}, UpdateSourceTrigger=LostFocus}" />
我肯定会扔掉
Minimum="{Binding Path=TimeDataTwo}"
Maximum="{Binding Path=TimeDataTwo}"
因为将min和max设置为当前值并没有任何意义,因此无法进行任何编辑。
第二期:
如果您想要24小时格式,则需要使用HH
格式图片 - hh
是12小时格式。
更改
StringFormat={}{0:hh:mm}
到
StringFormat={}{0:HH:mm}