Xamarin.forms xamarin表单列表视图自动刷新

Xamarin.forms xamarin表单列表视图自动刷新,xamarin.forms,Xamarin.forms,我是Xamarin.Forms的新手,我正在制作一个Listview,每当我在数据库中插入新信息时,它都需要更新。到目前为止,我可以显示我列表的信息并通过PHP文件添加它,但我无法使它自动刷新 namespace Proyect { [XamlCompilation(XamlCompilationOptions.Compile)] public partial class Alarms : ContentPage { public Alarms ()

我是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;
            } 
        }
    }
}
名称空间项目
{
[XamlCompilation(XamlCompilationOptions.Compile)]
公共部分类报警:ContentPage
{
公共警报()
{
初始化组件();
AlarmsList.ItemTemplate=新数据模板(typeof(Cells.AlarmsCell));//报警模板
这是LoadAlarms();
}
专用异步void LoadAlarms()
{
尝试
{
HttpClient=新的HttpClient();
client.BaseAddress=新Uri(“Http://192.168.0.13");  
字符串url=string.Format(“/Proyect/alarmscode.php?”);
var response=wait client.GetAsync(url);
var result=response.Content.ReadAsStringAsync().result;
var jsonalarms=JsonConvert.DeserializeObject(结果);
AlarmsList.ItemsSource=jsonalarms;
}
捕获(例外e)
{
等待显示警报(“错误”,e+,“正常”);
返回;
} 
}
}
}
Device.StartTimer(新的时间跨度(0,0,10),()=>{ //每10秒做一次

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

您是否可以尝试保留相同的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;
        }
    }
}
}
名称空间项目
{
[XamlCompilation(XamlCompilationOptions.Compile)]
公共部分类报警:ContentPage
{
私有ObservableCollection _itemsSource=null;
公共警报()
{
初始化组件();
AlarmsList.ItemTemplate=新数据模板(typeof(Cells.AlarmsCell));//报警模板
_itemsSource=新的ObservableCollection();
AlarmsList.ItemsSource=_ItemsSource;
这是LoadAlarms();
}
专用异步void LoadAlarms()
{
尝试
{
HttpClient=新的HttpClient();
client.BaseAddress=新Uri(“Http://192.168.0.13");
字符串url=string.Format(“/Proyect/alarmscode.php?”);
var response=wait client.GetAsync(url);
var result=response.Content.ReadAsStringAsync().result;
var jsonalarms=JsonConvert.DeserializeObject(结果);
_itemsSource.Clear();
foreach(jsonalarms中的var报警)
{
_项目来源添加(报警);
}
}
捕获(例外e)
{
等待显示警报(“错误”,e+,“正常”);
返回;
}
}
}
}

您是否使用计时器或某种计划任务定期从服务器请求更新信息?如果您使用MVVM->只是定期更新alarms属性,这将非常容易。我了解,如果我使用ObservableCollection作为ItemSource,listview将在任何时候自动更新项目被添加或删除,我想这就是我所做的。它不起作用嘿,谢谢。我试过了,它起作用,但它不是我想要的。添加新项目时是否可以刷新列表视图?