Я хочу изменить режим обновления, например здесь. Это мой код:
this.datePicker.On<iOS>().SetUpdateMode(UpdateMode.WhenFinished);
Первая часть помечена как неправильная this.datePicker.On<iOS>()
и ссылается на объект в xaml. В других местах тот же код работает нормально. Не знаю, что здесь не так. Сообщение об ошибке:
Returns the platform-specific instance of this DatePicker, on which a platform-specific method may be called.
'IPlatformElementConfiguration' does not contain a definition for 'SetUpdateMode' and the best extension method overload 'Picker.SetUpdateMode(IPlatformElementConfiguration, UpdateMode)' requires a receiver of type 'IPlatformElementConfiguration'.
Любое предложение?
Редактировать:
Похоже, что желаемое поведение (updateMode) доступно только для Picker
, но не для DatePicker
. См. здесь или здесь. Есть ли способ включить эту функцию также для Datepicker
? Как?
Да, я узнал это. Но есть ли обходной путь? Поместить часть кода из Picker
в собственный рендерер?
Что вы в основном хотите в средстве выбора даты, так это то, что пользователь выбирает дату, а затем нажимает кнопку «Готово», чтобы эта дата была выбрана, не так ли?
Да, только при нажатии кнопки Готово должно генерироваться событие DateSelected
. Поведение по умолчанию заключается в том, что при каждом крошечном движении прокрутки (до выбора «Готово») генерируется событие.
Проведя некоторое исследование, я думаю, что updateMode для datePicker пока недоступен.
@JackHua-MSFT: Это правильно, но есть ли обходной путь или другое решение, которое ведет себя так же? Например. индивидуальный контроль?
К сожалению, UpdateMode недоступен для средства выбора даты.
И обходной путь, который я нашел, заключается в создании пользовательского календаря (что я и сделал). Пользовательский календарь выглядит сложно создать, но его довольно просто реализовать (основные функции). Имея всего 1 месяц опыта работы с xamarin, я создал его.
Вы можете проверить полный код здесь:
Вы имеете в виду кастомные DatePicker
? Не знаю, сколько это кода, но, возможно, вы могли бы добавить это в свой ответ здесь.
Обновлено. Пожалуйста, проверьте указанный веб-сайт
Также ссылки на ответы являются плохими и не являются реальными ответами, поскольку ссылки являются внешними и могут быть изменены или удалены.
Просто хотел быть полезным для кого-то, так как я столкнулся с той же проблемой и должен создать собственный календарь. Не знал о вашем решении. Спасибо, кстати. Любая альтернатива, чтобы показать полный код?
Использование Xamarin Forms 4.6 здесь. Внутри вашего пользовательского рендерера используйте этот код:
protected override void OnElementChanged(ElementChangedEventArgs<DatePicker> e)
{
base.OnElementChanged(e);
if (e.NewElement != null && Control != null)
{
...
Element.On<Xamarin.Forms.PlatformConfiguration.iOS>().SetUpdateMode(UpdateMode.WhenFinished);
...
}
}
Это что-то новое после XF 4.6?
Я так не думаю, нет. Однако не уверен, какая версия.
Выглядит интересно, но сейчас я не могу это проверить :-( Это действительно работает для DatePicker
?
Как вы думаете, я бы опубликовал ответ, который, как я знаю, не работает?
Нет, но часто люди не до конца читают/понимают вопрос и на основе этого пишут ответ, а это не то, о чем я просил. Но я думаю, это невероятно, что вы опубликовали это, потому что все остальные говорили, что это не работает!
Я использую его прямо сейчас в моем пользовательском рендерере... это определенно работает.
Я предполагаю, что причина проста. DatePicker не имеет этой функции, а есть только у Picker!