【发布时间】:2023-04-07 18:47:01
【问题描述】:
我想在两列中分别显示日期时间和时间。使用输入“HHmmss”更新时间列会更新时间,但会将日期重置为当前日期。如何保存日期?
public class TimeToStringConverter : IValueConverter
{
public string Format { get; set; }
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
Format = "HH:mm:ss";
DateTime DateTimeValue = (DateTime)value;
return DateTimeValue.ToString(Format);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
string strValue = value.ToString();
DateTime DateTimeValue;
string format = "HHmmss";
if (value.ToString().Length == 4)
format = "HHmm";
var res1 = DateTime.TryParseExact(strValue, format, null, DateTimeStyles.None, out DateTimeValue);
if (res1)
return DateTimeValue;
return value;
}
}
xaml:
<UserControl.Resources>
<valrule:TimeToStringConverter x:Key="timeConverter"/>
</UserControl.Resources>
<DataGridTextColumn Header="Time" MinWidth="50">
<DataGridTextColumn.Binding>
<Binding Path="Time" StringFormat="HH:mm:ss" UpdateSourceTrigger="Default"
Converter="{StaticResource timeConverter}" >
<Binding.ValidationRules>
<valrule:DateValidation/>
</Binding.ValidationRules>
</Binding>
</DataGridTextColumn.Binding>
</DataGridTextColumn>
【问题讨论】:
-
在我看来你应该保持私有 DateTime _myDateTime;并为 VM 提供两个属性,公共字符串/DateTime Date{get;set;} 和公共字符串/DateTime Time{get;set;},这样您就不需要转换器并且可以更好地管理时间/日期.. .
标签: c# wpf xaml datetime ivalueconverter