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 = trueinInit()方法。
| 归档时间: |
|
| 查看次数: |
2590 次 |
| 最近记录: |