Xamarin.Forms登录后传递用户权限对应的TransportDetails至MainPage
解决方案:登录后传递用户权限对应的TransportDetails到MainPage
没问题,我来帮你搞定这个需求!其实核心就是先拿到登录用户的具体权限信息,再匹配对应的Transport数据,最后把筛选好的数据传给MainPage就行,具体步骤和代码修改如下:
1. 修改LoginViewModel中的CheckLogin方法
原来的代码只是判断凭据是否存在,现在我们需要获取登录用户的具体对象,然后根据他的Truck/Car/Bus属性筛选对应的TransportDetails:
public void CheckLogin() { Data data = new Data(); var allUsers = data.GetAllUserDetails(); // 获取匹配的登录用户对象(而不是仅判断存在) var loggedInUser = allUsers.FirstOrDefault(x => x.Username.Equals(Username) && x.Password.Equals(Password)); if (loggedInUser != null) { // 获取所有Transport数据 var allTransports = data.GetAppDetails(); // 用LINQ简化筛选逻辑,匹配用户有权限的Transport var userAllowedTransports = allTransports.Where(t => (t.Name == "Truck" && loggedInUser.Truck) || (t.Name == "Car" && loggedInUser.Car) || (t.Name == "Bus" && loggedInUser.Bus) ).ToList(); // 将筛选后的权限数据传递给MainPage Application.Current.MainPage.Navigation.PushAsync(new MainPage(userAllowedTransports)); } else { Application.Current.MainPage.DisplayAlert("Error", "Invalid credentials", "OK"); } }
2. 修改MainPage的构造函数以接收数据
接下来需要调整MainPage的构造函数,让它能接收我们筛选好的List<TransportDetails>,这样页面就能直接使用这些数据做UI展示了:
public partial class MainPage : ContentPage { // 存储用户有权限的Transport数据 private List<TransportDetails> _userAuthorizedTransports; // 修改构造函数,接收权限数据 public MainPage(List<TransportDetails> userTransports) { InitializeComponent(); _userAuthorizedTransports = userTransports; // 示例:如果你的页面有ListView用来展示Transport,可以直接绑定数据源 // TransportListView.ItemsSource = _userAuthorizedTransports; } // 如果你还需要保留传递Username的需求,可以重载构造函数: // public MainPage(string username, List<TransportDetails> userTransports) // { // InitializeComponent(); // // 同时处理用户名和权限数据 // } }
逻辑说明
- 首先通过
FirstOrDefault拿到登录用户的实例,这样我们就能访问他的权限开关(Truck/Car/Bus) - 然后用LINQ的
Where方法筛选出和用户权限匹配的TransportDetails,不用写多个if判断,代码更简洁 - 最后把筛选好的列表通过构造函数传给MainPage,页面就能直接使用这些数据来渲染UI(比如展示用户能访问的Transport入口)
内容的提问来源于stack exchange,提问作者ExpertGenie
相关产品推荐
相关产品推荐

