[试图在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选择器?
在那儿,我的意思是拾纸器。可以设置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>
希望有帮助。-