MvvmCross从日历UI获取日期

本文关键字:获取 取日期 UI 日历 MvvmCross | 更新日期: 2023-09-27 18:17:29

我目前有这个ViewModel叫BaseballGameViewModel。我要做的是在日期表单中为我的属性设置一个值,但我希望日期来自日历UI。我在核心中使用MvvmCross,因此它将更多地支持Android和iOS。任何帮助解释任何关于MvvmCross或如何做到这一点是感激的。谢谢你。

class BaseballGameViewModel
{
    private string _gameStartDate;
    public string GameStartDate
    {
        get { return _gameStartDate; }
        set
        {
            _gameStartDate = value;
            RaisePropertyChanged(() => GameStartDate);
        }
    }
}

MvvmCross从日历UI获取日期

我还没有使用iOS日历控件与MvvmCross,但我可以给你一个Android实现和什么ViewModel需要看起来像,和连接一个iOS控件应该不是太困难。

ViewModel:

DateTime _gameStartDate;
public DateTime GameStartDate
{
    get { return _gameStartDate; }
    set { SetProperty(ref _gameStartDate, value); }
}
Android活动:

Button _button;
DatePickerFragment _datePicker;
protected override void OnCreate(Bundle bundle)
{
    _button = FindViewById<Button>(Resource.Id.your_button_id);
    _button.Click += Button_OnClick;
}
void Button_OnClick(object sender, EventArgs eventArgs)
{
    _datePicker = DatePickerFragment.NewInstance(delegate (DateTime date)
    {
        ViewModel.GameStartDate = date;
    });
    _datePicker.Show(FragmentManager, DatePickerFragment.TAG);
}

DatePickerFragment.cs:

public class DatePickerFragment : DialogFragment, IOnDateSetListener
{
    public static readonly string TAG = "X:" + typeof(DatePickerFragment).Name.ToUpper();
    Action<DateTime> _dateSelectedHandler = delegate { };
    public static DatePickerFragment NewInstance(Action<DateTime> onDateSelected)
    {
        var frag = new DatePickerFragment
        {
            _dateSelectedHandler = onDateSelected
        };
        return frag;
    }
    public override Dialog OnCreateDialog(Bundle savedInstanceState)
    {
        var currentDate = DateTime.Now;
        var dialog = new DatePickerDialog(Activity, this, currentDate.Year, currentDate.Month - 1, currentDate.Day);
        return dialog;
    }
    public void OnDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)
    {
        var selectedDate = new DateTime(year, monthOfYear + 1, dayOfMonth);
        _dateSelectedHandler?.Invoke(selectedDate);
    }
}