如何在CollectionView中绑定Picker?

问题描述 投票:0回答:1

[试图在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选择器?

xamarin.forms data-binding itemtemplate
1个回答
0
投票

在那儿,我的意思是拾纸器。可以设置Title和/或BackgroundColor,以便可以看到它。

注意:通过运行代码,但使用Xamarin.Forms Picker控件确认它在那里,不确定<data:BindablePicker />是什么。如果您要查找的所有内容都可以o绑定数据,则也可以使用Picker Control。

您可以通过以下方式更改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>

希望有帮助。-

© www.soinside.com 2019 - 2024. All rights reserved.