C# IValueConverter将4位整数转换为时间(日期)

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

我正在尝试使用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>
转换器启动,但是,我似乎总是在结果中获取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}