Xamarin.forms DatePicker DateSelected命令

Xamarin.forms DatePicker DateSelected命令,xamarin.forms,Xamarin.forms,只是想确认DatePicker的DateSelected是否无法绑定,如: DateSelected="{Binding TargetDateSelectedCommand}"/> 在我看来,处理程序必须在.cs文件中创建。根据DatePicker,它没有任何命令属性。DateSelected是一个DateTime,而不是一个命令。如果可能,您可以尝试一下 自定义行为类,如下所示: public class DatePickerSelectedItemBehavior

只是想确认DatePicker的DateSelected是否无法绑定,如:

DateSelected="{Binding TargetDateSelectedCommand}"/>
在我看来,处理程序必须在.cs文件中创建。

根据DatePicker,它没有任何命令属性。DateSelected是一个DateTime,而不是一个命令。

如果可能,您可以尝试一下

自定义行为类,如下所示:

public class DatePickerSelectedItemBehavior: Behavior<DatePicker>
{
    public static readonly BindableProperty CommandProperty =
        BindableProperty.Create("Command", typeof(ICommand), typeof(DatePickerSelectedItemBehavior), null);
    public static readonly BindableProperty InputConverterProperty =
            BindableProperty.Create("Converter", typeof(IValueConverter), typeof(DatePickerSelectedItemBehavior), null);

    public ICommand Command
    {
        get { return (ICommand)GetValue(CommandProperty); }
        set { SetValue(CommandProperty, value); }
    }

    public IValueConverter Converter
    {
        get { return (IValueConverter)GetValue(InputConverterProperty); }
        set { SetValue(InputConverterProperty, value); }
    }

    public DatePicker AssociatedObject { get; private set; }

    protected override void OnAttachedTo(DatePicker bindable)
    {
        base.OnAttachedTo(bindable);
        AssociatedObject = bindable;
        bindable.BindingContextChanged += OnBindingContextChanged;
        bindable.DateSelected += DatePickerItemSelected;
    }

    protected override void OnDetachingFrom(DatePicker bindable)
    {
        base.OnDetachingFrom(bindable);
        bindable.BindingContextChanged -= OnBindingContextChanged;
        bindable.DateSelected -= DatePickerItemSelected;
        AssociatedObject = null;
    }

    void OnBindingContextChanged(object sender, EventArgs e)
    {
        OnBindingContextChanged();
    }

    void DatePickerItemSelected(object sender, DateChangedEventArgs e)
    {
        if (Command == null)
        {
            return;
        }

        object parameter = Converter.Convert(e, typeof(object), null, null);
        if (Command.CanExecute(parameter))
        {
            Command.Execute(parameter);
        }
    }

    protected override void OnBindingContextChanged()
    {
        base.OnBindingContextChanged();
        BindingContext = AssociatedObject.BindingContext;
    }
}

但是我有一种预感,默认情况下它是不可用的,对吗?谢谢你的回答,我来看看later@Arie是的,默认情况下不能将其与绑定一起使用。如果回复有帮助,请不要忘记接受它作为答案单击✔ 在这个答案的左上角投票,它将帮助其他有类似问题的人。
<ContentPage.Resources>
    <ResourceDictionary>
        <local:SelectedItemEventArgsToSelectedItemConverter x:Key="SelectedItemConverter" />
    </ResourceDictionary>
</ContentPage.Resources>
...
<DatePicker >
    <DatePicker.Behaviors>
        <local:DatePickerSelectedItemBehavior Command="{Binding OutputAgeCommand}"
                                                Converter="{StaticResource SelectedItemConverter}" />
    </DatePicker.Behaviors>
</DatePicker>
public class SelectedItemEventArgsToSelectedItemConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var eventArgs = value as DateChangedEventArgs;
        return eventArgs.NewDate;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}