【问题标题】:Xamarin: Combining DatePicker with TimePicker and storing as a stringXamarin:将 DatePicker 与 TimePicker 组合并存储为字符串
【发布时间】:2018-03-12 14:55:29
【问题描述】:

我是 Xamarin 的新手。我有一个表单,用户可以在其中创建事件。我在表单中使用 datepicker 和 timepicker。进行选择后,如果我先选择日期,则时间值不会改变,并且两个标签都有两个时间值[请参考图片]。但是最大的问题是这些值在后端数据库中存储为空,即使我将它们存储为“字符串”。请帮忙,这非常令人沮丧,因为在其他地方找不到提示/解决方案。谢谢!

This is how the label values are displayed

这是我的模型:

[JsonProperty("EndDateTime")]
        public String StartDateTime { get; set; }
[JsonProperty("EndDateTime")]
        public String EndDateTime { get; set; }

这是我的看法:

<Label 
    Text="Start Date" 
    Grid.Row="0" 
    Grid.Column="0"
></Label>
<Label 
    Text="Finish Date" 
    Grid.Row="0" 
    Grid.Column="1"
></Label>
<DatePicker 
    Format="MMM dd, yyyy" 
    DateSelected="DatePicker_StartDateSelected" 
    Grid.Column="0" 
    Grid.Row="1" 
    MinimumDate="{x:Static system:DateTime.UtcNow}" 
/>
<DatePicker 
    Format="MMM dd, yyyy" 
    DateSelected="DatePicker_FinishDateSelected" 
    Grid.Column="1" 
    Grid.Row="1" 
    MinimumDate="{x:Static system:DateTime.UtcNow}" 
/>
<TimePicker 
    x:Name="StartTime" 
    Format="hh:mm" 
    Grid.Row="2" 
    Grid.Column="0" 
/>
<TimePicker 
    x:Name="EndTime" 
    Format="hh:mm" 
    Grid.Row="2" 
    Grid.Column="1" 
/>
<Label 
    x:Name="StartDate" 
    Grid.Row="3" Grid.Column="0" 
    FontAttributes="Bold"  
    Text="{Binding StartDateTime, StringFormat='{}{0:MMM dd, yyyy hh:mm}'}" 
/>
<Label 
    x:Name="FinishDate" 
    Grid.Row="3" 
    Grid.Column="1" 
    FontAttributes="Bold"  
    Text="{Binding EndDateTime, StringFormat='{}{0:MMM dd, yyyy hh:mm}'}" 
/>

这就是我在后面的代码中将日期时间与时间连接起来的方式:

private void DatePicker_StartDateSelected(object sender, DateChangedEventArgs e)
{
    StartDate.Text = e.NewDate.Date.ToString(CultureInfo.InvariantCulture) + " " + StartTime.Time.ToString();
}

private void DatePicker_FinishDateSelected(object sender, DateChangedEventArgs e)
{
    FinishDate.Text = e.NewDate.Date.ToString(CultureInfo.InvariantCulture) + " " + EndTime.Time.ToString();
}

And this is how it get stored in database

【问题讨论】:

  • 当时间被选择时,TimePickers 是否也有一个事件,你应该听吗?似乎只有在日期更改时才更新 StartDate 和 FinishDate 标签。
  • @stiduck 感谢您的回复。我在 StartDate 和 FinishDate 事件(+ StartTime.Time.ToString())中将它们全部转换为字符串。但是,即使我忽略 TimePicker 类,它仍然会将 DateTime 发送为 null。

标签: c# xamarin.forms


【解决方案1】:

好的,考虑一下,我意识到标签的绑定不会传播/存储来自源 -DatePicker 和 Timepickers 的更改。所以,我只需要将标签绑定更改为Text="{Binding EndDateTime, Mode=TwoWay }"

将绑定设置为 Mode = TwoWay 成功了 :)

【讨论】:

    猜你喜欢
    • 2018-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    • 2021-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多