У меня проблема, и я надеюсь, что вы мне поможете.
Мое приложение в 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 и рассчитать, сколько дней осталось с сегодняшнего дня до указанной даты.





Во-первых, обычно рекомендуется хранить даты в виде типов 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;
}
}
}
Добавление и отображение даты работает корректно. К сожалению, когда я хочу добавить новый элемент, но не выбрал дату (я не нажимаю DatePicker) и нажимаю «Сохранить» -> у меня есть исключение: необработанное исключение: System.Reflection.TargetInvocationException: исключение было выброшено цель вызова.
это совсем другая проблема - вам следует задать новый вопрос
Спасибо большое. Конечно, это решило мою проблему. Я использовал ваш код и использовал «Binding DaysLeft» вместо «Binding Date».