Как привязать время в универсальной платформе Windows TimePicker?

Как привязать время TimePicker. При попытке привязать время я получаю ошибку FormatException. Как конвертировать в формат, который TimePickerбудет поддерживать?

1 ответ

  1. Часы.Свойство Time имеет тип TimeSpan, поэтому для привязки к свойству TimePicker нам необходимо преобразовать datetime в timespan.

    public class MainViewModel : ObservableObject
    {
    
      //Initialize someDateTime with a default value
      private DateTime someDateTime = DateTime.Parse("07/21/1969 2:56AM");
    
      public DateTime SomeDateTime
      {
        get { return someDateTime; }
        set { Set(ref someDateTime,value); }
      }
    
    }}
    
    
    public class DateTimeToTimeSpanConverter : IValueConverter
    {
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        try
        {
            DateTime dt = (DateTime)value;            
            TimeSpan? ts = DateTimeConverter.DateTimeToTimeSpan(dt);
            return ts.GetValueOrDefault(TimeSpan.MinValue);
        }
        catch (Exception ex)
        {
            System.Diagnostics.Debug.WriteLine(ex.Message);
            return TimeSpan.MinValue;
        }
    }
    }
    

    MainPage.код XAML:

    <Page ...>
    
       <Page.DataContext>
        <ViewModels:MainViewModel/>
      </Page.DataContext>
    
    
    
    <Page.Resources>
      <Converters:DateTimeToTimeSpanConverter
        x_Key="DateTimeToTimeSpanConverter"/>
    </Page.Resources>
    
      <!-- ... -->
      <TimePicker
        Header="My time"
        Margin="10" FontSize="24"
        Time="{Binding SomeDateTimeTime, Converter={StaticResource DateTimeToTimeSpanConverter}, Mode=TwoWay}"  />
      <!-- ... -->
    
    </Page>