Xamarin.Form问题(如果从Akavache缓存绑定,则ListView不会刷新)
我在刷新列表时遇到问题 在Visual Studio 2019(Xamarin.Forms 4.3.0.991250)和Akavache 6.6.1中,我正在使用带有初始默认值的Xamarin.Form问题(如果从Akavache缓存绑定,则ListView不会刷新),listview,xamarin,akavache,Listview,Xamarin,Akavache,我在刷新列表时遇到问题 在Visual Studio 2019(Xamarin.Forms 4.3.0.991250)和Akavache 6.6.1中,我正在使用带有初始默认值的MasterDetailPage,其中有一个变量是ObservableCollection类型的项 首先,我向缓存中添加了一个项(我称这个对象为TodoItem)。然后用从Akavache缓存获得的项绑定显示ListView,但它不工作,项具有值->ListView不刷新 我试过一些东西: 更改版本(Xamarin.F
MasterDetailPage
,其中有一个变量是ObservableCollection
类型的项
首先,我向缓存中添加了一个项(我称这个对象为TodoItem)。然后用从Akavache缓存获得的项绑定显示ListView,但它不工作,项具有值->ListView
不刷新
我试过一些东西:
- 更改版本(Xamarin.Forms&Akavache),例如:XF 4.1最高版本和Akavache降级6.0、6.1、6.2…=>不工作
- 如果使用硬编码new ObservableCollection(new ListView(){…})设置项=>它正在工作
- 如果应用程序正在运行,我会更改布局并保存(Xaml热加载)->它正在工作
公共ObservableCollection项{get;set;}=new ObservableCollection()
#区域添加新命令 专用命令_addNewCommand; 公共命令AddNewCommand=> _添加新命令??(_addNewCommand=new命令(async(p)=>await AddNewExecute(),(p)=>!IsBusy)); 专用异步任务AddNewExecute() { var key=Guid.NewGuid().ToString().Substring(0,5); 等待BlobCache.LocalMachine.InsertObject(key,new-TodoItem(){Id=key.Substring(0,2),Text=“abc”,Description=“def”},new-TimeSpan(1,0,0)); var list=await BlobCache.LocalMachine.getAllObject(); 项目=新的可观察收集(列表); } #端区
private async Task AddNewExecute()
{
var key = Guid.NewGuid().ToString().Substring(0, 5);
await BlobCache.LocalMachine.InsertObject<TodoItem>(key, new TodoItem()
{
Id=key.Substring(0,2),Text="abc",Description="def" }, new TimeSpan(1, 0, 0));
Device.BeginInvokeOnMainThread (async () => {
var list = await BlobCache.LocalMachine.GetAllObjects<TodoItem>();
Items = new ObservableCollection<TodoItem>(list);
});
}
private异步任务AddNewExecute()
{
var key=Guid.NewGuid().ToString().Substring(0,5);
等待BlobCache.LocalMachine.InsertObject(key,new-TodoItem())
{
Id=key.Substring(0,2),Text=“abc”,Description=“def”},newtimespan(1,0,0));
Device.beginInvokeMainThread(异步()=>{
var list=await BlobCache.LocalMachine.getAllObject();
项目=新的可观察收集(列表);
});
}
通过这种方式,您正在更改UI线程上的变量请不要将代码作为图像发布请将代码包装在AddNewExecute inside、Device.BeginInvokeOnMainThread(()=>{//您的代码在这里});您需要发布xaml和Items属性。Tks@ottermatic,我稍后会尝试转发结果…Tks@Adrián Romero,但此代码失败,Device.beginInvokeMainThread无法在new TodoItem()块中运行。??为什么失败?(你能看到我的编辑吗?)
private async Task AddNewExecute()
{
var key = Guid.NewGuid().ToString().Substring(0, 5);
await BlobCache.LocalMachine.InsertObject<TodoItem>(key, new TodoItem()
{
Id=key.Substring(0,2),Text="abc",Description="def" }, new TimeSpan(1, 0, 0));
Device.BeginInvokeOnMainThread (async () => {
var list = await BlobCache.LocalMachine.GetAllObjects<TodoItem>();
Items = new ObservableCollection<TodoItem>(list);
});
}