如何解决Xamarin.Forms C# Picker 和元组列表不显示任何内容
我的问题是在 Xamarin.Forms 中使用 C# for Android 项目。
我正在尝试在选择器中显示元组列表以选择其中之一。我在 ObservableCollection (int ID,string Name)
中使用元组的 ObservableCollection<(int ID,string Name)> BLA => new ObservableCollection<(int ID,string Name)>();
表示法。
遗憾的是,<Picker ItemsSource="{Binding BLA}" ItemdisplayBinding="{Binding Item2}"/>
和 <Picker ItemsSource="{Binding BLA}" ItemdisplayBinding="{Binding Name}"/>
都没有在选择弹出窗口中显示元组的名称属性。
像 ObservableCollection<Tuple<int,string>> blat => new ObservableCollection<Tuple<int,string>>();
这样的“旧”方式适用于 <Picker ItemsSource="{Binding blat}" ItemdisplayBinding="{Binding Item2}"/>
。
Xamarin 尚不支持元组的第一种方式还是我必须先设置一些东西?
解决方法
还可以通过使用数据绑定将其 ItemsSource 属性绑定到 IList 集合来填充数据。
请注意,ItemsSource 集合中的每个项目都是对象类型,因此必须强制转换为字符串以进行显示。
通常,我会创建一个包含一些属性的模型类,以便在 xaml 中进行绑定。
public class model
{
public int Id { get; set; }
public string Name { get; set; }
}
public partial class Page2 : ContentPage
{
public ObservableCollection<model> listdata { get; set; }
public Page2()
{
InitializeComponent();
listdata = new ObservableCollection<model>()
{
new model(){Id=1,Name="model 1"},new model(){Id=2,Name="model 2"},new model(){Id=3,Name="model 3"},new model(){Id=4,Name="model 4"}
};
this.BindingContext = this;
}
}
当绑定到一个对象列表时,必须告诉选择器从每个对象显示哪个属性。这是通过将 ItemDisplayBinding
属性设置为每个对象所需的属性来实现的。在上面的代码示例中,选择器设置为显示每个 model.Name
属性值。
<Picker
Title="Select a model"
ItemDisplayBinding="{Binding Name}"
ItemsSource="{Binding listdata}"
TitleColor="Red" />
更新:
如果不想使用自定义类,可以使用 Dictionary
public partial class Page2 : ContentPage
{
public static Dictionary<string,int> colors { get; }= new Dictionary<string,int>
{
{ "model1",6 },{ "model2",1 },{ "model3",2 },{ "model4",3 },{ "model5",4 },{ "model6",5 }
};
public List<string> Colors { get; } = colors.Keys.ToList();
public Page2()
{
InitializeComponent();
this.BindingContext = this;
}
}
<Picker
Title="Select a model"
ItemsSource="{Binding Colors}"
TitleColor="Red" />
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。