В моем проекте Xamarin.Forms (с Prism, Android) я пытаюсь реализовать EventToCommandBehavior для DatePicker, а также TimePicker для передачи выбранных значений.XAML выглядит следующим образом:
<DatePicker x:Name="DatePicker"
Format="D"
HorizontalOptions="CenterAndExpand"
Margin="60, 0, 60, 0">
<DatePicker.Behaviors>
<b:EventToCommandBehavior EventName="DateSelected"
Command="{Binding DateSelectedCommand}"
EventArgsConverter="{StaticResource DateSelectedConv}"/>
</DatePicker.Behaviors>
</DatePicker>
<TimePicker x:Name="TimePicker"
HorizontalOptions="CenterAndExpand"
Margin="60, 0, 60, 0">
<TimePicker.Behaviors>
<b:EventToCommandBehavior EventName="TimeChanged"
Command="{Binding TimeSelectedCommand}"
EventArgsConverter="{StaticResource TimeSelectedConv}">
</b:EventToCommandBehavior>
</TimePicker.Behaviors>
</TimePicker>
В ViewModel этой страницы настроек у меня есть
public ICommand DateSelectedCommand { get; set; }
public ICommand TimeSelectedCommand { get; set; }
private void NotifyDateSelected(DateTime date)
{
MessagingCenter.Send<SettingsPageViewModel, DateTime>(this, "dateChanged", date);
}
private void NotifyTimeSelected(TimeSpan timeSpan)
{
MessagingCenter.Send<SettingsPageViewModel, TimeSpan>(this, "timeChanged", timeSpan);
}
Метод преобразования TimeSelectedConverter:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var eventArgs = value as TimeChangedEventArgs;
if (eventArgs == null)
throw new ArgumentException("Expected TimeChangedEventArgs as value", "value");
return new TimeSpan(eventArgs.HourOfDay, eventArgs.Minute, 0);
}
Модель просмотрапотребляющий OverviewPage подписывается так:
MessagingCenter.Subscribe<SettingsPageViewModel, DateTime>(this, "dateChanged",
(settingsPageViewModel, date) =>
{
Update();
});
MessagingCenter.Subscribe<SettingsPageViewModel, TimeSpan>(this, "timeChanged",
(settingsPageViewModel, timeSpan) =>
{
Update();
});
Это отлично работает с DatePicker.Однако, как только я добавляю EventToCommandBehavior в TimePicker, приложение вылетает.Может быть, TimePicker не поддерживает поведение?