您好,我正在研究xamarin Forms 3.0项目,并且我正在使用Picker选择值,并使用它们将用户数据显示给Picker。现在我的问题是我无法将用户选择的值从数据库显示给Picker。请帮助...
背后的代码
下面是我将数据传递到此页面的页面构造函数
public SummaryDetail(CpDetails cp)
{
InitializeComponent();
if (cp == null)
{
throw new System.ArgumentNullException(nameof(cp));
}
GetLocations();
BindingContext = cp;
pklocation.SelectedIndex = cp.LocationId;
}
public async void GetLocations()
{
var loci = new List<Locations>();
var client = new HttpClient();
var json = await client.GetStringAsync("this is the link from where i am getting other values in picker");
loci = JsonConvert.DeserializeObject<List<Locations>>(json);
pklocation.ItemsSource = loci;
}
<Picker x:Name="pklocation" Title="Select Location" ItemDisplayBinding="{Binding Name}"/>
答案 0 :(得分:2)
pklocation.SelectedIndex = cp.LocationId;
这似乎是不正确的。
SelectedIndex
表示ItemsSource
中集合中的索引。它不知道如何选择哪个ID。因此,您需要找出列表中所选对象的索引,然后将SelectedIndex
设置为该索引。但是可能更容易的是设置SelectedItem
:pklocation.SelectedItem = cp;
以防万一,请尝试以下操作:
pklocation.SelectedItem = ((List<Locations>)pklocation.ItemsSource).FirstOrDefault(c => c.LocationId == cp.LocationId);
尽管那样,我还是建议在更全局的级别上保存loci
变量,以便您可以从GetLocations
方法中引用它。
有关Microsoft文档的更多信息:https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/picker/
答案 1 :(得分:0)
感谢@Gerald Versluis的帮助,但我已经通过使用数组添加项来完成它,然后通过如下比较GetLocation()本身的索引来将SelectedIndex设置为选定值...
private int selectedLocation;
public SummaryDetail(CpDetails cp)
{
InitializeComponent();
GetLocations();
BindingContext = cp;
selectedLocation = cp.LocationId;
}
public async void GetLocations()
{
var loci = new List<Locations>();
var client = new HttpClient();
var json = await client.GetStringAsync("this is link");
loci = JsonConvert.DeserializeObject<List<Locations>>(json);
foreach (var item in loci)
{
pklocation.Items.Add(item.Name);
if (item.Id == selectedLoacion)
pklocation.SelectedIndex = item.Id;
}
}
答案 2 :(得分:0)
对我来说,绑定到 ViewModel 就像这样。
XAML
<Picker x:Name="gender" Title="Select Gender" TitleColor="Blue" SelectedItem="{Binding Gender}">
视图模型代码
public Object _gender;
public Object Gender
{
get { return _gender; }
set
{
_gender = value;
OnPropertyChanged();
}
}
在从数据库中检索数据的函数内
Gender = (string)profile["gender"];