Xamarin基于XML的Android日期选择器.如何激发事件以设置在DatePicker上选择的时间

本文关键字:设置 DatePicker 时间 选择 事件 何激发 XML 基于 Android 日期 选择器 | 更新日期: 2023-09-27 18:29:02

我正在使用xml处理一个xamarin android项目,我有一个日期选择器,我想在xml上使用。我如何为日期选择器触发事件?下面是我的datepicker:的xml代码

    <DatePicker
        android:id="@+id/DatePicker"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:datePickerMode="spinner"
        android:calendarViewShown="false" />

活动代码:

    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        SetContentView(Resource.Layout.ChangeDateTime);
        hour = DateTime.Now.Hour;
        minute = DateTime.Now.Minute;
        date = DateTime.Now;
        DateTime newDateTime;
        Vm.CurrentTime = hour.ToString() + minute.ToString();
        TimePicker.CurrentHour = (Java.Lang.Integer)DateTime.Now.Hour;
        TimePicker.CurrentMinute = (Java.Lang.Integer)DateTime.Now.Minute;
        TimePicker.TimeChanged += delegate (object sender, TimePicker.TimeChangedEventArgs e)
        {
            Vm.CurrentTime = e.HourOfDay.ToString() + e.Minute.ToString();
        };
        DatePicker.DateTime = DateTime.Now;
    }

我知道使用TimePicker,您可以为TimePicker.TimeChanged代理,但对于DatePicker呢?

Xamarin基于XML的Android日期选择器.如何激发事件以设置在DatePicker上选择的时间

如果你在屏幕上有一个按钮,你实际上可以使用下面这样的点击事件:

SomeButton.Click += (sender, e) =>
{
    //Do your action here
}

好吧,这对它的工作方式(对于.NET)有点奇怪,但这是Android的设计。

当你调用DatePicker的deInit方法时,你会传递一个IOnDateChangedListener,并在实现接口的OnSelectedDayChange函数上处理它

通常,如果您不自己设置委托,Xamarin实现会有一个弱委托来处理事件,但在这种情况下,由于Init()方法已经需要这个接口,并且假设您总是调用该方法来初始化日期,因此它们没有实现弱委托,因此没有事件。

 private EditText  _txtdob;
 DatePickerDialog _datePickerDialog;
 protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        SetContentView(Resource.Layout.sign_up);
        _txtdob.Focusable = false;
        _txtdob.Click += (sender, e) =>
        {
            _datePickerDialog.Show();
        };
        _datePickerDialog = new DatePickerDialog(this, (sender, args) =>
        {
            _txtdob.Text = args.Date.ToString("dd/MM/yyyy");
            ViewModel.NewUser.DOB = args.Date.Date;
        }, 
        DateTime.Now.Year, DateTime.Now.Month - 1, DateTime.Now.Day);
}

在这里,单击_datePickerDialog时将采用今天的默认日期,当用户选择其他日期时,它将更改为用户选择的日期。此处为ViewModel.NewUser.DOB=args。日期。日期;代码行采用用户选择的新日期,其中NewUser是视图模型中的一个属性,使用UserDto创建新用户,DOB是UserDto中的datetime属性。