Reputation: 5411
I made a programmatically custon uipicker inside a actionsheet, now I need to set a text field with the item selected of the picker. With a datepicker I get the value like this:
actionSheetDatePicker.DatePicker.ValueChanged += (s, e) => {
this.lblCheckOut.Text = f.ToString ((s as UIDatePicker).Date);
};
Now I'm trying to do the same thing with my UIPickerView but I don't have a ValueChanged Method.
Does anyone can help me to get the value of the item selected with my picker.
Thanks in advance.
Upvotes: 0
Views: 1884
Reputation: 912
To elaborate on Jason's answer, here is a code sample using a UIPickerView as a custom date picker. Hope it helps someone.
UIPickerView datePicker = new UIPickerView ();
var mod = new DatePickerDataModel ();
datePicker.Model = mod;
mod.ValueChanged += (object sender, EventArgs e) => {
_selectedDate = mod.SelectedItem;
};
class DatePickerDataModel : UIPickerViewModel
{
public event EventHandler<EventArgs> ValueChanged;
public List<DateTime> Items { get; private set; }
public DateTime SelectedItem {
get { return Items [selectedIndex]; }
}
int selectedIndex = 0;
public DatePickerDataModel ()
{
var items = new List<DateTime> ();
for (int i = 0; i < 14; i++) {
items.Add (DateTime.Now.Subtract (TimeSpan.FromDays (i)));
}
Items = items;
}
public override nint GetRowsInComponent (UIPickerView picker, nint component)
{
return Items.Count;
}
public override nint GetComponentCount (UIPickerView picker)
{
return 1;
}
public override void Selected (UIPickerView picker, nint row, nint component)
{
selectedIndex = (int)row;
ValueChanged?.Invoke(this, EventArgs.Empty());
}
public override string GetTitle (UIPickerView pickerView, nint row, nint component)
{
var t = Items [(int)row];
var m = t.ToString ("MMM");
var d = t.ToString ("ddd");
return $"{d} {m} {t.Day}";
}
public override nfloat GetRowHeight (UIPickerView picker, nint component)
{
return 44;
}
}
Upvotes: 5
Reputation: 89117
UIPickerViewDelegate has a Selected method which you can use to raise an event when the user selects a value.
Upvotes: 0