2013-04-12 3 views
0

Я сделал программный утилизатор custon внутри листа действий, теперь мне нужно установить текстовое поле с выбранным элементом выбора. С DatePicker я получаю значение, как это:Monotouch get UiPickerView selected item

actionSheetDatePicker.DatePicker.ValueChanged += (s, e) => { 
       this.lblCheckOut.Text = f.ToString ((s as UIDatePicker).Date); 
      }; 

Теперь я пытаюсь сделать то же самое с моей UIPickerView, но у меня нет метода ValueChanged.

Кто-нибудь может помочь мне получить значение элемента, выбранного с помощью моего выбора.

Заранее спасибо.

ответ

0

UIPickerViewDelegate имеет выбранный метод, который можно использовать для поднять событие, когда пользователь выбирает значение.

+0

Спасибо, Джейсон, не могли бы вы поделиться каким-то кодом, пожалуйста. – Jean

4

Чтобы уточнить ответ Джейсона, здесь приведен пример кода с использованием UIPickerView в качестве настраиваемого выбора даты. Надеюсь, это поможет кому-то.

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