Вы не можете сделать это без помощи какого-либо другого класса, поэтому вам нужно будет преобразовать его уже в вашей ViewModel и представить его как свойство и использовать его.
Это просто означает что-то вроде:
public TimeSpan MyTimeSpan
{
get { return Item.Time; } // Assuming Item.Time is a TimeSpan
set { Item.Time = value; }
}
Вы также можете использовать преобразователь значений.Для этого создайте новый класс, который реализует интерфейс IValueConverter
.Должно быть что-то вроде этого, обратите внимание, что это псевдокод с моей головы и может не работать из коробки:
public class DateTimeToTimeSpanConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return ((DateTime)value).Time;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
var incomingTimeSpan = (TimeSpan)value;
return new DateTime(2018, 1, 1, incomingTimeSpan.Hours, incomingTimeSpan.Minutes, incomingTimeSpan.Seconds);
}
}
В вашем XAML вы можете использовать его следующим образом:
<ContentPage xmlns:local="clr-namespace:YourNamespaceName"...>
<ContentPage.Resources>
<ResourceDictionary>
<local:DateTimeToTimeSpanConverter x:Key="timeSpanConverter" />
</ResourceDictionary>
</ContentPage.Resources>
...
<TimePicker Time="{Binding Item.Time, Converter={StaticResource timeSpanConverter}}"/>
...
</ContentPage>
Подробнее о преобразователях значений в Документах: https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/data-binding/converters