Xamarin.forms 如何在CollectionView中绑定选择器?

Xamarin.forms 如何在CollectionView中绑定选择器?,xamarin.forms,data-binding,itemtemplate,Xamarin.forms,Data Binding,Itemtemplate,正在尝试为CollectionView内的选择器绑定列表列表。似乎无法让它工作。标签显示的信息没有问题。。。但不管我怎么做,都不能让picker展示任何东西。总是空的 XAML 模板 public class Template : INotifyPropertyChanged { public string lblTitle { get; set; } public ObservableCollection<string> picker

正在尝试为CollectionView内的选择器绑定列表列表。似乎无法让它工作。标签显示的信息没有问题。。。但不管我怎么做,都不能让picker展示任何东西。总是空的

XAML

模板

    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


    }
公共类模板:INotifyPropertyChanged
{
公共字符串lblTitle{get;set;}
公共可观察集合选择器{get;set;}
#区域inotifyproperty已更改
公共事件属性更改事件处理程序属性更改;
受保护的虚拟void OnPropertyChanged([CallerMemberName]字符串propertyName=null)
{
PropertyChangedEventHandler处理程序=PropertyChanged;
if(处理程序!=null)
处理程序(这是新的PropertyChangedEventArgs(propertyName));
}
#端区
}
填充列表

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

        }
    }
公共类标准调用器:ObservableCollection
{
公共可观测收集电缆直径{get;set;}
公共可观测收集电压{get;set;}
公共可观测收集距离{get;set;}
公共可观测集合LEDsCurrent{get;set;}
公共ObservableCollection CurrentRange{get;set;}
公共标准学家()
{
InitList();
添加(新模板{lblTitle=“1”,选择器=CableDiameter});
添加(新模板{lblTitle=“2”,选择器=电压});
添加(新模板{lblTitle=“3”,选择器=距离});
添加(新模板{lblTitle=“4”,picker=LEDsCurrent});
添加(新模板{lblTitle=“5”,选择器=当前范围});
}
私有void InitList()
{
CableDiameter=新的ObservableCollection(){
“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”};
电压=新的可观测采集(){
“12 V”,
“24 V”,
“46.25伏”,
“47 V”,
“48 V”};
距离=新的可观测集合(){
“2000万”,
“50米”,
“100米”,
“250米”,
“500米”};
LEDsCurrent=新的ObservableCollection(){
“350毫安”,
“500毫安”,
“650毫安”,
“700毫安”,
“750毫安”,
“1000毫安”,
“1050毫安”};
CurrentRange=新的ObservableCollection(){
“±50毫安”,
“±100毫安”,
“±300毫安”,
“±500毫安”,
“±1000毫安”,
“±2000毫安”,
“±4000毫安”};
}
}

被告知添加更多细节,但不知道该说什么。为什么标签接受文本,但选择器没有绑定到ObservableList选择器?

它就在那里,我指的是选择器。设置
标题
和/或
背景色
,以便查看

注意:通过运行代码但使用Xamarin.Forms
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>


希望这能有所帮助。-

@pinedax。Sry,Bindable picker只是2015年教程中的另一个测试。我知道Picker控件在那里,我可以绑定它的标题,就像标签一样,但里面没有信息。你的代码在我的项目中运行良好(我使用了Picker控件)。因此,首先我建议你可以将Xamarin.Forms的版本更新为最新版本(4.2.x)。如果问题仍然存在,您可以提供一个包含问题的样本,以便我可以对其进行测试。我使用的是4.3版。。CollectionView的某些功能在其他情况下不起作用。。。我将降级并测试。谢谢,很好。我可以看到它与4.2.0兼容,但现在必须为CarouseView.position找到一个解决方案,该解决方案在4.2中不可用,但在预发布的4.3I中,我将我的项目更新为4.3,但它仍然可以正常工作。因此,您能否提供一个示例,我可以在我这方面进行检查。好的。我下班后再做。大约9小时后。。谢谢你的帮助!
 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"  };

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