xamarin表单listview自动刷新

时间:2018-02-21 16:53:36

标签: xamarin.forms

我是Xamarin.Forms的新手,我正在创建一个Listview,每当我在数据库中插入新信息时都需要更新,到目前为止我可以显示我的列表信息并通过PHP文件添加它我无法自动刷新。

namespace Proyect
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class Alarms : ContentPage
    {
        public Alarms ()
        {
            InitializeComponent();          
            AlarmsList.ItemTemplate = new DataTemplate(typeof(Cells.AlarmsCell));   //Template of the Alarms
            this.LoadAlarms();
        }

        private async void LoadAlarms()
        {
            try
            {
                HttpClient client = new HttpClient();
                client.BaseAddress = new Uri("Http://192.168.0.13");  
                string url = string.Format("/Proyect/alarmscode.php?");
                var response = await client.GetAsync(url);
                var result = response.Content.ReadAsStringAsync().Result;
                var jsonalarms = JsonConvert.DeserializeObject<ObservableCollection<GetAlarms>>(result);
                AlarmsList.ItemsSource = jsonalarms;
            }
            catch (Exception e)
            {
                await DisplayAlert("ERROR", e + "", "OK");
                return;
            } 
        }
    }
}

2 个答案:

答案 0 :(得分:0)

Device.StartTimer(new TimeSpan(0,0,10),()=&gt; {             //每10秒做一次事情

        return true; // runs again, or false to stop
    });

答案 1 :(得分:0)

您是否可以尝试保持相同的ObservableCollection并更新其内容,而不是每次都设置一个新的ObservableCollection?

namespace Proyect
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class Alarms : ContentPage
{
    private ObservableCollection<GetAlarms> _itemsSource = null;

    public Alarms()
    {
        InitializeComponent();
        AlarmsList.ItemTemplate = new DataTemplate(typeof(Cells.AlarmsCell));   //Template of the Alarms

        _itemsSource = new ObservableCollection<GetAlarms>();
        AlarmsList.ItemsSource = _itemsSource;

        this.LoadAlarms();
    }

    private async void LoadAlarms()
    {
        try
        {
            HttpClient client = new HttpClient();
            client.BaseAddress = new Uri("Http://192.168.0.13");
            string url = string.Format("/Proyect/alarmscode.php?");
            var response = await client.GetAsync(url);
            var result = response.Content.ReadAsStringAsync().Result;
            var jsonalarms = JsonConvert.DeserializeObject<ObservableCollection<GetAlarms>>(result);

            _itemsSource.Clear();
            foreach (var alarm in jsonalarms)
            {
                _itemsSource.Add(alarm);
            }
        }
        catch (Exception e)
        {
            await DisplayAlert("ERROR", e + "", "OK");
            return;
        }
    }
}
}