Как связать Picker внутри CollectionView? - PullRequest
0 голосов
/ 20 октября 2019

Попытка связать список списков для средства выбора внутри CollectionView. Не могу заставить его работать. Этикетка показывает информацию без проблем ... но что бы я ни пытался, не могу заставить сборщика что-либо показать. Всегда пусто!

XAML

          <Frame BorderColor="DimGray">
                <CollectionView 
                    x:Name="StandardCollection" 
                    ItemsSource="{Binding standardCol}"
                    IsGrouped="True"
                    >
                    <CollectionView.ItemsLayout>
                        <GridItemsLayout 
                            Orientation="Horizontal"
                                Span="5" 

                            />
                    </CollectionView.ItemsLayout>
                    <CollectionView.ItemTemplate>
                        <DataTemplate>
                            <StackLayout Orientation="Horizontal" WidthRequest="220" Padding=" 2,2,2,2">
                                <Label Text="{Binding lblTitle}" VerticalOptions="Center" />
                                <data:BindablePicker  ItemsSource="{Binding picker}" SelectedIndex="0" VerticalOptions="CenterAndExpand" HorizontalOptions="EndAndExpand"/>
                            </StackLayout>                                                   
                        </DataTemplate>
                    </CollectionView.ItemTemplate>
                </CollectionView>
            </Frame> 

ViewModel

    {
        private StandardCalList _standardCol = new StandardCalList();
        public StandardCalList standardCol { get
            { return _standardCol; }
            set { _standardCol = value; OnPropertyChanged(); } }


        public StandardCalculationViewModel()
        {



        }


        #region INotifyPropertyChanged 
        public event PropertyChangedEventHandler PropertyChanged;

        protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
                handler(this, new PropertyChangedEventArgs(propertyName));
        }
        #endregion

    }

Шаблон

    public class Template : INotifyPropertyChanged
    {
        public string lblTitle { get; set; }
        public ObservableCollection<string> picker { get; set; }


        #region INotifyPropertyChanged 
        public event PropertyChangedEventHandler PropertyChanged;

        protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
                handler(this, new PropertyChangedEventArgs(propertyName));
        }
        #endregion


    }

Заполнение списков

 public class StandardCalList : ObservableCollection<Template>
    {
        public ObservableCollection<string> CableDiameter { get; set; }
        public ObservableCollection<string> Voltage { get; set; }
        public ObservableCollection<string> Distance { get; set; }
        public ObservableCollection<string> LEDsCurrent { get; set; }
        public ObservableCollection<string> CurrentRange { get; set; }



        public StandardCalList()
        {

            InitList();



            Add(new Template { lblTitle="1", picker = CableDiameter });
            Add(new Template { lblTitle = "2", picker = Voltage });
            Add(new Template { lblTitle = "3", picker = Distance });
            Add(new Template { lblTitle = "4", picker = LEDsCurrent });
            Add(new Template { lblTitle = "5", picker = CurrentRange });

        }

        private void InitList()
        {

            CableDiameter = new ObservableCollection<string>() {
                "9 / 6.63mm2" ,
                "10 / 5.26mm2" ,
                "12 / 3.31mm2" ,
                "15 / 1.65mm2" ,
                "16 / 1.31mm2" ,
                "18 / 0.823mm2" ,
                "22 / 0.326mm2" ,
                "24 / 0.205mm2" ,
                "26 / 0.129mm2"  };

            Voltage = new ObservableCollection<string>() {
                "12 V" ,
                "24 V" ,
                "46.25 V" ,
                "47 V" ,
                "48 V"  };

            Distance = new ObservableCollection<string>() {
                "20m" ,
                "50m" ,
                "100m" ,
                "250m" ,
                "500m"  };

            LEDsCurrent = new ObservableCollection<string>() {
                "350 mA" ,
                "500 mA" ,
                "650 mA" ,
                "700 mA" ,
                "750 mA" ,
                "1000 mA" ,
                "1050 mA"  };

        CurrentRange = new ObservableCollection<string>() {
                "±50 mA" ,
                "±100 mA" ,
                "±300 mA" ,
                "±500 mA" ,
                "±1000 mA" ,
                "±2000 mA" ,
                "±4000 mA"  };

        }
    }

Сказал добавить больше деталей, но не знаю точно, что сказать. Почему метка принимает текст, но средство выбора не привязывается к средству выбора ObservableList?

1 Ответ

0 голосов
/ 21 октября 2019

Это там, я имею в виду сборщик. Либо установите Title и / или BackgroundColor, чтобы вы могли видеть его.

Примечание: подтвердил, что он есть, запустив код, но с использованием элемента управления Xamarin.Forms Picker, но не уверен, что <data:BindablePicker />является. Вы также можете использовать элемент управления Picker, если все, что вы ищете, может привязать данные.

Вы можете изменить CollectionView.Template примерно так:

<CollectionView.ItemTemplate>
    <DataTemplate>
        <StackLayout Orientation="Horizontal" WidthRequest="220" Padding=" 2,2,2,2">
            <Label Text="{Binding lblTitle}" VerticalOptions="Center" />
            <Picker ItemsSource="{Binding picker}"
                    SelectedIndex="0"
                    Title="Select One" // or what ever you want to add 
                    BackgroundColor="ForestGreen" // or whatever color you want to use
                    VerticalOptions="CenterAndExpand"
                    HorizontalOptions="EndAndExpand"/>
        </StackLayout>
    </DataTemplate>
</CollectionView.ItemTemplate>

Надеюсь, это поможет.-

...