【问题标题】:Pass MVVM Prism navigation arguments to Xamarin Master-Detail Detail page将 MVVM Prism 导航参数传递到 Xamarin Master-Detail 详细信息页面
【发布时间】:2018-01-30 02:17:09
【问题描述】:

问题

嘿嘿嘿嘿。

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

应用结构

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 登录并尝试将一些用户信息从我的数据库传递到具有包含数据绑定用户名字段的嵌套详细信息页面的母版页。

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);
        }

【问题讨论】:

    标签: c# xaml mvvm xamarin.forms prism


    【解决方案1】:

    我认为更改导航字符串以包含 NavigationPage 并且我的 UserPage 已修复它。等待其他人的反馈。暂时接受为正确答案。

    错误代码

    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);
            }
    

    等待其他人的反馈。

    【讨论】:

    • 您不应该在 XAML 中指定详细信息,它应该来自导航 URI
    • 我已经看到文档在 XAML developer.xamarin.com/guides/xamarin-forms/… 中使用 &lt;local:ContactsPage /&gt; 指定详细信息。这不是最佳做法吗?
    • 没有。使用 Prism 时,您应该通过 URI 构建导航堆栈。这也让 Prism 解析您的视图,以便您可以在必要时将依赖项注入其中。
    • 完美,我将尽快重构。那么在 XAML 中,一些数据绑定属性用什么​​来代替 Detail 呢?
    • 从 XAML 中删除整个 MasterDetilPage.Detail 元素。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-09
    • 1970-01-01
    • 2017-04-13
    相关资源
    最近更新 更多