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