Xamarin.forms xamarin表单列表视图自动刷新
我是Xamarin.Forms的新手,我正在制作一个Listview,每当我在数据库中插入新信息时,它都需要更新。到目前为止,我可以显示我列表的信息并通过PHP文件添加它,但我无法使它自动刷新Xamarin.forms xamarin表单列表视图自动刷新,xamarin.forms,Xamarin.forms,我是Xamarin.Forms的新手,我正在制作一个Listview,每当我在数据库中插入新信息时,它都需要更新。到目前为止,我可以显示我列表的信息并通过PHP文件添加它,但我无法使它自动刷新 namespace Proyect { [XamlCompilation(XamlCompilationOptions.Compile)] public partial class Alarms : ContentPage { public Alarms ()
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将在任何时候自动更新项目被添加或删除,我想这就是我所做的。它不起作用嘿,谢谢。我试过了,它起作用,但它不是我想要的。添加新项目时是否可以刷新列表视图?