Xamarin.Forms TimePicker是否支持行为?

时间:2018-06-24 16:59:48

标签: c# xaml xamarin.forms prism

在我的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>

在此SettingsPage的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的Convert方法是

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的ViewModel订阅

MessagingCenter.Subscribe<SettingsPageViewModel, DateTime>(this, "dateChanged",
            (settingsPageViewModel, date) =>
            {
                Update();
            });

MessagingCenter.Subscribe<SettingsPageViewModel, TimeSpan>(this, "timeChanged",
            (settingsPageViewModel, timeSpan) =>
            {
                Update();
            });

这对于DatePicker可以正常工作。但是,一旦将EventToCommandBehavior添加到TimePicker,应用程序就会崩溃。也许TimePicker不支持行为?

0 个答案:

没有答案