Xamarin.Forms - Изменение значений из SQLite перед отображением (DateTime) - PullRequest
0 голосов
/ 10 июля 2019

У меня проблема, и я надеюсь, что вы мне поможете.

Мое приложение в Xamarin.Forms может добавить к sqlite:

public class Product
    {
        [PrimaryKey, AutoIncrement]
        public int ID { get; set; }
        public string Text { get; set; }
        public string Details { get; set; }
        public string Date { get; set; }
    }

Эти данные добавляются с помощью:

<Editor Placeholder="Enter text" Text="{Binding Text}" />
<Editor Placeholder="Enter details" Text="{Binding Details}" />
<DatePicker Date="{Binding Date, Mode=TwoWay}" Format="dd/MM/yyyy" />

На другой странице я отображаю их с помощью ListView:

<Label Text="{Binding Text}" />
<Label Text="{Binding Details}" />
<Label Text="{Binding Date}" />

Дата отображается в формате: 01.01.2017 00: 00: 00

Я хотел бы иметь возможность изменить этот текст даты до его появления.Например, я хотел бы преобразовать эту строковую дату в объект DateTime и вычислить, сколько дней осталось с сегодняшнего дня до данной даты.

1 Ответ

2 голосов
/ 10 июля 2019

Во-первых, как правило, рекомендуется хранить даты в виде типов DateTime в БД, а не в строках.

Тем не менее, существует множество способов приблизиться к этому.Можно было бы добавить свойство только для чтения к вашей модели или ViewModel

public class Product
{
    [PrimaryKey, AutoIncrement]
    public int ID { get; set; }
    public string Text { get; set; }
    public string Details { get; set; }
    public string Date { get; set; }

    // tell sqlite to ignore this column
    [Ignore]
    public int DaysLeft {
      get {
        // should add error handling here in case
        // date format is bad
        var date = DateTime.Parse(Date);
        // diff will be a TimeSpan
        var diff = DateTime.Now - date;
        // might want to add logic to handle negative values
        return diff.Days;
      }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...