Xamarin从Firebase获取姓名和邮箱:姓名无法显示问题排查
问题排查与解决方案
1. 修复ViewModel的属性变更通知
你的WelcomeVM实现了INotifyPropertyChanged接口,但属性赋值时未触发PropertyChanged事件,这会导致UI无法感知属性值变化(Email当前显示正常是因为初始化绑定已完成,但如果FirstName初始值为空,UI就不会更新)。
修改WelcomeVM代码,添加属性变更触发逻辑:
public class WelcomeVM : INotifyPropertyChanged { public WelcomeVM(string email2, string firstName2) { FirstName = firstName2; Email = email2; } private string firstName; public string FirstName { get { return firstName; } set { firstName = value; OnPropertyChanged(nameof(FirstName)); } } private string email; public string Email { get { return email; } set { email = value; OnPropertyChanged(nameof(Email)); } } public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } }
2. 修正FirebaseHelper的冗余逻辑
GetCitizen方法存在两处问题:
- 参数
firstName未被使用,属于冗余参数 - 重复调用
await firebase.Child("Citizen").OnceAsync<Citizen>(),浪费资源
修改GetCitizen方法:
public static async Task<Citizen> GetCitizen(string email) { try { var allCitizen = await GetAllCitizen(); return allCitizen.FirstOrDefault(a => a.Email == email); } catch (Exception e) { Debug.WriteLine($"Error:{e}"); return null; } }
3. 确认FirstName的传递逻辑
检查登录后导航到Welcome页面的代码,确保:
- 调用
GetCitizen获取的Citizen对象中FirstName不为空(可通过断点或Debug.WriteLine输出验证) - 实例化
WelcomeVM时正确传递FirstName值,示例:
// 登录成功后获取用户信息 var user = await FirebaseHelper.GetCitizen(loggedInEmail); // 导航到Welcome页并绑定ViewModel await Navigation.PushAsync(new WelcomePage(new WelcomeVM(user.Email, user.FirstName)));
4. 验证Firebase数据结构
确认Firebase的Citizen节点下,每个用户对象确实包含FirstName字段,且字段名大小写与C#模型完全匹配(C#大小写敏感,需保证两者一致)。
内容的提问来源于stack exchange,提问作者Zale Zale
相关产品推荐
相关产品推荐

