Xamarin 选择器未显示列表中的日期

Posted

技术标签:

【中文标题】Xamarin 选择器未显示列表中的日期【英文标题】:Xamarin picker not showing the date from the list 【发布时间】:2020-07-30 04:01:12 【问题描述】:

我有以下代码:

    <ContentPage.BindingContext>
        <local:PisterosViewModel/>
    </ContentPage.BindingContext>

<Picker x:Name="pck_Pisteros"
                        ItemDisplayBinding="Binding PisteroN"
                        ItemsSource="Binding PisterosLista"
                        SelectedItem="Binding PisterosLista"
                        Title="Seleccione el usuario..."/>

然后是我的模型:

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics.Contracts;
using System.Text;

namespace ServLottery.Models

    public class Pisteros
    
        public string PisteroID  get; set; 
        public string PisteroN  get; set; 

    


和视图模型:

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Text;

namespace ServLottery.Models

    public class PisterosViewModel
    
        public IList<Pisteros> PisterosLista  get; set; 

        public PisterosViewModel()
        
            try
            
                PisterosLista = new ObservableCollection<Pisteros>();
                GetPisteros();
            
            catch (Exception ex)
            
                throw ex;
            
        

        private async void GetPisteros()
        
            try
            
                RestClient client = new RestClient();
                var pist = await client.Get<Models.Pisteros>("https://servicentroapi.azurewebsites.net/api/Pisteros");
                if (pist != null)
                
                    PisterosLista = pist;
                
            
            catch (Exception ex)
            
                throw ex;
            

        

    

我在 var pist 中设置了一个断点,它确实有值,然后 Pisteros 列表似乎也得到了值,这是在页面加载时执行的,所以我不明白是什么问题,但选择器从来没有显示选项。

【问题讨论】:

【参考方案1】:

欢迎来到 SO !

Xaml 中的BindingContext 似乎无法处理动态数据,例如来自 Web 服务器的 API 数据。

在 ContentPage 中有一个动态绑定ItemSource的解决方法,也可以参考this officail sample。

因此,在 Page.Xaml.cs 中添加代码如下:

protected override async void OnAppearing()

    pck_Pisteros.ItemsSource = await GetTasksAsync();
    base.OnAppearing();


private async Task<List<Pisteros>> GetTasksAsync()

    List<Pisteros> PisterosLista = new List<Pisteros>();
    HttpClient client = new HttpClient();
    Uri uri = new Uri(string.Format("https://servicentroapi.azurewebsites.net/api/Pisteros", string.Empty));
    HttpResponseMessage response = await client.GetAsync(uri);
    if (response.IsSuccessStatusCode)
    
        string content = await response.Content.ReadAsStringAsync();
        PisterosLista = JsonConvert.DeserializeObject<List<Pisteros>>(content);
        Console.WriteLine("content :: " + content);
        Console.WriteLine("Data :: " + PisterosLista);
    

    return PisterosLista;

现在它会显示:

【讨论】:

谢谢小辈,这太棒了。它对 ListView 是否同样有效? @EstefaniaHernandez 是的,它也适用于ListView 我创建了这个***.com/questions/63184834/…也许你可以帮我检查一下 @EstefaniaHernandez Okey,我会检查的。 再次嗨 :-( 另一个相关问题***.com/questions/63201109/…

以上是关于Xamarin 选择器未显示列表中的日期的主要内容,如果未能解决你的问题,请参考以下文章

引导日期选择器未在 editorFor 中显示模型值

SwiftUI - 日期选择器未正确显示

JQuery Mobile 日期选择器未在 Chrome 中显示日期

Rails4 + Bootstrap,日期选择器未显示

剑道网格值中的剑道日期时间选择器未进入控制器

WordPress 日期选择器未出现在联系表 7 中