2016-11-12 100 views
0

我目前有這個ViewModel叫BaseballGameViewModel。我想要做的是爲我的財產在日期表單中設置一個值,但我希望日期來自日曆界面。我在覈心中使用MvvmCross,因此它會是更多的Android和iOS。任何幫助解釋任何關於MvvmCross或如何去解決這個問題的表示讚賞。謝謝。MvvmCross從日曆界面獲取日期

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

回答

0

我沒有使用MvvmCross了iOS日曆控件,但我可以給你一個Android的實施,哪些視圖模型需要的樣子,和接線,在iOS控制應該不會太困難。

視圖模型:

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); 
    } 
}