コード例 #1
0
        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;
        }
コード例 #2
0
        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;
        }