Sam*_*Sam 4 xamarin xamarin.forms maui .net-maui
我的 .NET MAUI 应用程序中有一个CollectionView
,我将其放置在 .NET MAUI 应用程序中RefreshView
。当我调用 API 来填充 this 时CollectionView
,我会缓存数据,这样我就不必在每次用户点击此页面时继续进行 API 调用。
为了简化我的代码,我private
在视图模型中创建了一个调用 API 的方法。视图模型如下所示:
public partial MyViewModel : BaseViewModel
{
ObservableCollection<MyModel> MyData { get; } = new();
[RelayCommand]
async Task RefreshData()
{
IsBusy = true;
await GetData(true);
IsBusy = false;
}
private async Task GetData(bool shouldGetFreshData)
{
// Makes API call to get data, then assigns it to MyData collection
}
public async void Init()
{
IsBusy = true;
await GetData(false);
IsBusy = false;
}
}
Run Code Online (Sandbox Code Playgroud)
该页面的 XAML 如下所示:
<RefreshView
IsRefreshing={Binding IsBusy}
Command={Binding RefreshDataCommand}>
<CollectionView>
...
</CollectionView>
</RefreshView>
Run Code Online (Sandbox Code Playgroud)
我还连接了页面以使用MyViewModel
作为其视图模型并且OnAppearing()
,我调用Init()
视图模型的方法。
这是我所期待的,但没有发生:
我想,Init()
首先会调用 ,然后调用GetData()
带有false
输入参数的方法。这样,我就可以使用缓存的数据。每当用户CollectionView
通过下拉刷新该方法时,RefreshData()
都会以输入参数的形式调用该方法true
,这将强制代码进行 API 调用。
与我预期的不同的是,发生了以下情况:
Init()
方法首先被调用,因此, with 行IsBusy = true
被执行。RefreshData()
方法await GetData(false)
in方法Init()
await GetData(true)
in方法RefreshData()
所有这些的结果是,该GetData()
方法被调用两次。
我想,引发这一切的原因是IsBusy
。我认为IsBusy
只能作为一个指示器,但不一定调用RefreshData()
绑定到Command
我的 的方法RefreshView
。
这是正常行为还是我在这里遗漏了一些东西?
显然,这是“正常”行为,因为我手动设置IsBusy
为true
. 我决定把这个问题留在这里,因为这可能是一个影响其他人的陷阱。
这是文档: https: //learn.microsoft.com/en-us/dotnet/maui/user-interface/controls/refreshview
所以,我所要做的就是删除IsBusy = true
inInit()
方法。
归档时间: |
|
查看次数: |
2590 次 |
最近记录: |