C# IValueConverter将4位整数转换为时间(日期)
我正在尝试使用IValueConverter编写一个转换器 我试图做的是允许用户在DataGRid中的任意位置键入1到4位数字,并以24小时时间格式表示时间 这是我到目前为止的代码,当在虚拟方法(而不是转换器)中使用虚拟值进行测试时,它返回所需的日期+时间C# IValueConverter将4位整数转换为时间(日期),c#,wpf,C#,Wpf,我正在尝试使用IValueConverter编写一个转换器 我试图做的是允许用户在DataGRid中的任意位置键入1到4位数字,并以24小时时间格式表示时间 这是我到目前为止的代码,当在虚拟方法(而不是转换器)中使用虚拟值进行测试时,它返回所需的日期+时间 public class ReturnDateConverter : IValueConverter { public object Convert(object value, Type targetType, object para
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>
转换器启动,但是,我似乎总是在结果中获取DataTime的minvalue,如果newTime.Minutes==1返回结果,它将退出此行的代码;因为没有价值存在
任何帮助都将不胜感激
编辑:
由于已经有了答案,我没有改变这个问题,而是取出ConverterParameter=1,现在我只得到一个空值,这里的var param=parameter为string 第一期
将ConverterParameter=1传递给转换器,并解析此参数而不是值
更新
查看DateTimeUpDown提供的各种可能性,您可以尝试AllowTimeInput并使用所需的格式字符串指定Format=Custom:
<xctk:DateTimeUpDown Format="Custom"
FormatString="H:mm"
AllowTextInput="true"
Value="{Binding Path=TimeDataTwo, StringFormat={}{0:hh:mm}, UpdateSourceTrigger=LostFocus}" />
因为将“最小值”和“最大值”设置为当前值实际上没有意义,因此无法进行任何编辑
第二期:
如果您想要24小时格式,您需要使用HH格式的图片-HH是12小时格式
改变
StringFormat={}{0:hh:mm}
到
请参见转换器参数参数始终为1。没有用户输入用于创建时间值。所以,不要指望结果是min date以外的任何东西。在代码中放置一个断点并一步一步地执行它,您将很快看到结果是什么wrong@KevinGosse,我已经在过去4个小时内逐步完成了代码。我将不得不回到绘图板,我离一个接近工作的示例太远了。在此之前,这个问题是有答案的。取出ConverterParameter=1并更改了格式,现在转换器没有启动???,抱歉,这意味着没有值。我的意思是说,没有值,它现在为空。UV为帮助,因为它确实回答了我的部分问题。你的Xaml看起来像你的转换器卡在DateTimeUpDown的最大属性内-检查属性的开始{和结束},也许在这里更新你的代码以反映你当前的代码。是的,我将不得不重新评估我所做的工作,将转换器移出最大值会给我带来有趣的结果。我也改变了价值观。现在一切都不正常了。我将这个问题标记为已解决,直到我能更接近一个工作示例为止。
StringFormat={}{0:hh:mm}
StringFormat={}{0:HH:mm}