void UpdateItems() { // supress notification of non-user generated events (e.g. adding\syncing list values) _isChanging = true; FormsListPicker picker = _listPicker; // add/remove slots from control to match element while (picker.Items.Count < Element.Items.Count + 1) { picker.Items.Add(new ItemViewModel(string.Empty)); } while (picker.Items.Count > Element.Items.Count + 1) { picker.Items.RemoveAt(picker.Items.Count - 1); } // update all control values to match element values for (var i = 0; i < Element.Items.Count; i++) { var item = (ItemViewModel)picker.Items[i + 1]; if (item.Data == Element.Items[i]) { continue; } item.Data = Element.Items[i]; } picker.SelectedIndex = Element.SelectedIndex + 1; _isChanging = false; }
protected override void OnElementChanged(ElementChangedEventArgs <Picker> e) { _listPicker = new FormsListPicker(); UpdateAlignment(); UpdateIsEnabled(); base.OnElementChanged(e); if (e.OldElement != null) { ((ObservableList <string>)Element.Items).CollectionChanged -= ItemsCollectionChanged; } ((ObservableList <string>)Element.Items).CollectionChanged += ItemsCollectionChanged; _listPicker.ItemTemplate = (System.Windows.DataTemplate)System.Windows.Application.Current.Resources["PickerItemTemplate"]; _listPicker.FullModeItemTemplate = (System.Windows.DataTemplate)System.Windows.Application.Current.Resources["PickerFullItemTemplate"]; _listPicker.ExpansionMode = ExpansionMode.FullScreenOnly; _listPicker.Items.Add(new ItemViewModel(" ") { MaxHeight = 0 }); _listPicker.ListPickerModeChanged += ListPickerModeChanged; _listPicker.Loaded += (sender, args) => { // The defaults from the control template won't be available // right away; we have to wait until after the template has been applied _defaultBrush = _listPicker.Foreground; UpdateTextColor(); }; var grid = new System.Windows.Controls.Grid { Children = { _listPicker }, MaxWidth = Device.Info.PixelScreenSize.Width }; SetNativeControl(grid); UpdatePicker(); _listPicker.SelectionChanged += PickerSelectionChanged; }