将MVVM Prism导航参数传递给Xamarin Master-Detail Detail页面

时间:2017-08-21 23:09:36

标签: c# xaml mvvm xamarin.forms prism

问题

嘿嘿嘿嘿。

我有一个使用mvvm prism的主详细页面应用程序。一旦用户登录我的应用程序,他们就会从登录页面进入主页面。我想将登录页面中的导航参数传递给嵌套在母版页内的用户详细信息页面。 。 。但是详细信息页面嵌套在母版页的XAML中,因此在正确传递参数时会出现问题。

APP结构

master-page.xaml 一个好的小ui就在这里,一旦用户登录就呈现菜单和用户页面

<MasterDetailPage.Master>
        <pages:HamburgerMenu x:Name="HamburgerMenu" />
    </MasterDetailPage.Master>
    <MasterDetailPage.Detail>
        <NavigationPage>
            <x:Arguments>
                <pages:UserPage x:Name="UserPage" />
            </x:Arguments>
        </NavigationPage>
    </MasterDetailPage.Detail>

app.xaml.cs 应用程序呈现LoginPage 的入口点,该页面不是菜单项的一部分,或者与主要详细信息页面相关联它只是有一个方法,将用户导航到主详细信息页面

protected override void OnInitialized()
    {
        InitializeComponent();
        MainPage = new LoginPage();
    }

login-page-viewmodel.cs 登录并传递尝试将一些用户信息从我的数据库传递到母版页,该母版页具有包含数据绑定用户名字段的嵌套详细信息页。 / p>

public NavigationParameters np = new NavigationParameters();

    // magic code everywhere

    private async void LoginAsync()
        {
            var user = await LoginAttemptAsync(_awsomePassword);

            np.Add("UserName", user.name);

            await _navigationService.NavigateAsync("MasterPage", np);
        }

1 个答案:

答案 0 :(得分:0)

我认为更改导航字符串以包含NavigationPage并且我的UserPage修复了它。等待别人的反馈。现在接受正确答案。

BUGGY CODE

login-page-viewmodel.cs

public NavigationParameters np = new NavigationParameters();

    // magic code everywhere

    private async void LoginAsync()
        {
            var user = await LoginAttemptAsync(_awsomePassword);

            np.Add("UserName", user.name);

            await _navigationService.NavigateAsync("MasterPage", np);
        }

固定但不是最佳做法

*使用Prism时,您应该通过URI构建导航堆栈。这也让Prism解析你的视图,这样你就可以在必要时将依赖关系注入其中)

login-page-viewmodel.cs

public NavigationParameters np = new NavigationParameters();

    // magic code everywhere

    private async void LoginAsync()
        {
            var user = await LoginAttemptAsync(_awsomePassword);

            np.Add("UserName", user.name);

            await _navigationService.NavigateAsync("MasterPage/Navigation/UserPage", np);
        }

等待别人的反馈。