如何将 Xamarin TimePicker 值保存到数据库?

How do I save Xamarin TimePicker value to database?

我正在使用 SQLite 存储来自 Xamarin.Forms 应用程序的数据。我希望用户能够将 DatePicker 用于日期,将 TimePicker 用于时间,然后将其存储。当我使用以下内容时:

<DatePicker Date="{Binding Date}"
    x:Name="DatePicker"
    Format="D" />

它正确地将所选日期存储在数据库中,但是当我使用时:

<TimePicker Time="{Binding Time}"
     x:Name="TimePicker"
     Format="T"/>

每次存储时间为12:00上午。我错过了什么?

日期和时间都是数据库中的日期时间值。

using System;
using SQLite;

namespace Items.Models
{
    public class Item
    {
        [PrimaryKey, AutoIncrement]
        public int ID { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public string Location { get; set; }
        public DateTime Date { get; set; } = DateTime.Now;
        public DateTime Time { get; set; }
    }

using System.Collections.Generic;
using System.Threading.Tasks;
using SQLite;
using Items.Models;

namespace Item.Data
{
    public class ItemDatabase
    {
        readonly SQLiteAsyncConnection database;

        public ItemDatabase(string dbPath)
        {
            database = new SQLiteAsyncConnection(dbPath);
            database.CreateTableAsync<Item>().Wait();
        }

        public Task<List<Item>> GetItemsAsync()
        {
            //Get all items.
            return database.Table<Item>().ToListAsync();
        }

        public Task<Item> GetItemAsync(int id)
        {
            // Get a specific item.
            return database.Table<Item>()
                            .Where(i => i.ID == id)
                            .FirstOrDefaultAsync();
        }

        public Task<int> SaveItemAsync(Item item)
        {
            if (item.ID != 0)
            {
                // Update an existing item.
                return database.UpdateAsync(item);
            }
            else
            {
                // Save a new item.
                return database.InsertAsync(item);
            }
        }

        public Task<int> DeleteItemAsync(Item item)
        {
            // Delete an Item.
            return database.DeleteAsync(item);
        }
    }
}

你弄错了 TimePicker.Time 的类型,应该是 TimeSpan 而不是 DateTime ,所以绑定创建不正确,这就是为什么当select TimePicker 上的时间。

修改你的代码如下

public class Item
    {

        public DateTime Date { get; set; } = DateTime.Now;
        public TimeSpan Time { get; set; }
    }