我正在开发一个 .NET MAUI 应用程序,其中有一个 ClientReviewsViewModel,它使用 ObservableCollection 来显示评论列表。评论显示在 CollectionView 中,我使用 RefreshView 刷新数据。我面临的问题是,虽然数据在页面最初加载时完美加载,但在刷新数据后却不会出现。
这是我的 XAML 布局的片段:
<ActivityIndicator
Grid.Row="0"
IsRunning="{Binding IsBusy}"
IsVisible="{Binding IsBusy}"
HorizontalOptions="Center"
VerticalOptions="Center"
Color="{StaticResource Primary}"/>
<RefreshView
Grid.Row="0"
Command="{Binding LoadClientReviewsCommand}"
IsRefreshing="{Binding IsRefreshing}"
IsEnabled="True"
IsVisible="{Binding IsRefreshing, Converter={StaticResource InverseBooleanConverter}}">
<ScrollView VerticalScrollBarVisibility="Never">
<Grid>
<CollectionView ItemsSource="{Binding ReviewsList}"
Margin="0,15,0,0">
<!-- CollectionView ItemTemplate here -->
</CollectionView>
</Grid>
</ScrollView>
</RefreshView>
这是我的 ClientReviewsViewModel 的一部分:
public partial class ClientReviewsViewModel : BaseViewModel
{
public ObservableCollection<ReviewViewModel> ReviewsList { get; set; }
public UserProfileViewModel ProfileUser { get; set; }
public string UserId;
private RoutingService routingService;
private Repo repo;
public ClientReviewsViewModel(Repo repo, RoutingService routingService)
{
this.repo = repo;
this.routingService = routingService;
ReviewsList = new ObservableCollection<ReviewViewModel>();
ProfileUser = new UserProfileViewModel();
IndicatorTitle = "Reviews";
}
private void PopulateReviewsList(UserProfileViewModel profileUser)
{
ReviewsList.Clear();
if (profileUser.Reviews?.Any() == true)
{
foreach (var review in profileUser.Reviews)
{
ReviewsList.Add(review);
}
}
}
[RelayCommand]
private async Task LoadClientReviews()
{
IsBusy = true;
try
{
PopulateReviewsList(ProfileUser);
LastRefreshed = DateTime.Now;
}
catch (Exception ex)
{
await Dialogs.Toast(ex.Message);
}
finally
{
IsRefreshing = false;
IsBusy = false;
}
}
}
问题: 当我调用 LoadClientReviews 时,ReviewsList 被清除并重新填充,但 UI 没有任何反应。
问题: 为什么 ObservableCollection 刷新后不更新 UI? 我需要检查或实施什么来确保 UI 反映对 ObservableCollection 所做的更改吗? 任何帮助将不胜感激!谢谢!