You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:32:42