繁体   English   中英

如何在 TimePicker 通用 Windows 平台中绑定时间?

[英]How to bind time in TimePicker Universal windows Platform?

如何在TimePicker绑定时间。 当我尝试绑定时间时,出现 FormatException 错误。 如何转换为TimePicker支持的格式?

TimePicker.Time 属性属于 TimeSpan 类型,因此为了绑定到 TimePicker 的时间属性,我们需要将日期时间转换为时间跨度。

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;
    }
}
}

主页.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>

TimePicker.Time 是一个时间跨度。 您可以使用 DateTime TimeOfDay 属性设置时间。

例如:

XAML:

<TimePicker Time="{Binding PickerTime}"/>

视图模型.cs:

TimeSpan pickerTime = DateTime.Now.TimOfDay;
    ///PROPERTY
    public TimeSpan PickerTime {
        get { return pickerTime; }
        set {
            if(pickerTime != value) {
                pickerTime = value;
                OnPropertyChanged("PickerTime");
            }
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM