如何使用 MvvmCross 创建 MasterDetailPage?

2024-04-28

我正在尝试使用 MvvmCross 开发 Xamarin.Forms 应用程序,并且我想使用汉堡菜单(MasterDetailPage),但我不知道该怎么做。我尝试了不同的方法,搜索教程和示例,但没有成功。谁能帮我?


正如你在这里看到的MvvmCross 游乐场 https://github.com/MvvmCross/MvvmCross/tree/develop/Projects/Playground,您应该首先创建一个 RootViewModel、MenuViewModel 和 FirstViewModel。然后在 UI 文件夹中创建 RootPage、MenuPage 和 FirstPage。

您的 RootViewModel 应如下所示:

public class RootViewModel : BaseViewModel
{
    private readonly IMvxNavigationService _navigationService;
    public RootViewModel(IMvxNavigationService navigationService)
    {
        _navigationService = navigationService;
    }

    public override void ViewAppearing()
    {
        base.ViewAppearing();

        MvxNotifyTask.Create(async ()=> await this.InitializeViewModels();
    }

    private async Task InitializeViewModels()
    {
        await _navigationService.Navigate<MenuViewModel>();
        await _navigationService.Navigate<FirstViewModel>();
    }
}

edit:我将导航移至异步任务以避免使用 async void。

xaml RootPage 必须实现 MvxMasterDetailPage:

<?xml version="1.0" encoding="UTF-8"?>
<views:MvxMasterDetailPage x:TypeArguments="viewModels:RootViewModel"
    xmlns="http://xamarin.com/schemas/2014/forms"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:views="clr-namespace:MvvmCross.Forms.Views;assembly=MvvmCross.Forms"
    xmlns:mvx="clr-namespace:MvvmCross.Forms.Bindings;assembly=MvvmCross.Forms"
    xmlns:viewModels="clr-namespace:yournamespace.Core.ViewModels"
    x:Class="yournamespace.UI.Views.RootPage"
    Icon="hamburger.png">
</views:MvxMasterDetailPage>

后面的 C# 代码使用 Presenter,如下所示:

[MvxMasterDetailPagePresentation(MasterDetailPosition.Root, WrapInNavigationPage = false)]
public partial class RootPage : MvxMasterDetailPage<RootViewModel>
{
    public RootPage()
    {
        InitializeComponent();
    }

    protected override void OnAppearing()
    {
        base.OnAppearing();
    }
}

MenuPage 必须是普通的 MvxContentPage 和 C# 代码,在菜单页面上实现演示者:

[MvxMasterDetailPagePresentation(MasterDetailPosition.Master)]

FirstPage 也是 MvxContentPage 并且所有详细信息页面必须是:

[MvxMasterDetailPagePresentation(MasterDetailPosition.Detail, NoHistory = true)]

在主详细信息的所有页面中添加无历史记录,以防止导航返回错误。

edit:我忘记了,有一个错误导致菜单在导航后无法关闭,可能他们会在 MvvmCross 版本 6 上修复,要修复它,您必须在执行导航之前将其粘贴到导航任务中:

if(Application.Current.MainPage is MasterDetailPage masterDetailPage)
{
    masterDetailPage.IsPresented = false; 
}
else if(Application.Current.MainPage is NavigationPage navigationPage && navigationPage.CurrentPage is MasterDetailPage nestedMasterDetail)
{
    nestedMasterDetail.IsPresented = false;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 MvvmCross 创建 MasterDetailPage? 的相关文章

随机推荐

  • 将文件添加到现有 zip 文件

    我正在使用 python 的zipfile module zip 文件位于以下路径 home user a b c test zip并在下面创建另一个文件 home user a b c 1 txt我想将此文件添加到现有的 zip 中 我这
  • 适用于 Web 照片库的正确 NoSQL 数据架构

    我正在寻找为照片库的 NoSQL 存储构建合适的数据结构 在我的网络应用程序中 一张照片可以是一个或多个相册的一部分 我有使用 MySQL 的经验 但几乎没有使用键值存储的经验 使用 MySQL 我将设置 3 个表 如下所示 photos
  • 如何在 selenium Chrome 功能中设置默认下载目录?

    请查找以下具有 chrome 功能的代码 事实上浏览器并没有将文件下载到指定的路径 private static DesiredCapabilities getChromeCapabilities throws Exception Stri
  • 样式的顺序重要吗?

    下面是我的标记 当我将鼠标移到超链接上时 它们会带有下划线并变成红色 但如果我交换最后两条规则的顺序 超链接仍然会带有下划线 但它们的颜色会变为黑色而不是红色 这是设计使然吗 如果是这样 规则是如何应用的 谢谢 康斯坦丁
  • Android LocationRequest:请求过期时获取回调

    我想知道如何捕获事件或当我的 LocationRequest 过期时发生什么 这是代码 然后我称之为 mLocationRequest LocationRequest create mLocationRequest setPriority
  • ECLIPSE RCP 项目无法成功导出

    当我使用 product 文件的概述选项卡上的导出向导导出 Eclipse 产品时遇到错误 错误信息如下 但当我从 Eclipse 内部将其作为 Eclipse 应用程序运行时 它工作得很好 任何人都可以对此提供一些想法 C workSpa
  • @Page { size:landscape} 过时了吗?

    CSS 规则 page size landscape 应该强制浏览器以横向模式打印页面 stackoverflow 上的许多问题 许多其他编程网站以及参考著作 例如 O Reilly 的 HTML XTHML 权威指南 第五版 中都提到了这
  • 如何计算dropzone中上传的所有文件大小?

    我想计算在 dropzone 中上传的所有选定文件的总大小 例如 如果我选择了 5 个文件 每个文件大小为 2mb 那么 它应该返回 10mb 总大小 我想限制所有文件的总大小是否大于限制 谁能帮我解决这个问题 我真的很困难 您可能需要此功
  • AWS Step Functions 中的直通输入到输出

    我怎样才能将输入传递给TaskAWS Step Functions 中的状态到输出 读完后输入和输出处理 http docs aws amazon com step functions latest dg amazon states lan
  • ORA 00904 错误:无效的标识符

    我已经在虚拟 XP 中安装了 Oracle 10g 并使用以下命令创建了一个表 create table reg1 fname varchar2 30 lname varchar2 30 addr varchar2 30 mail varc
  • selenium 2 Web 驱动程序另存为对话框

    使用 selenium 2 和 webdriver 我的一个脚本需要以 pdf 或 csv 格式保存报告 两者都只会弹出一个另存为对话框 我不知道如何与之互动 我现在正在尝试使用 Firefox 但希望它可以在所有浏览器中运行 我读过 20
  • 防止 ffmpeg 在降低视频分辨率的同时改变颜色强度

    我有一个用例 我需要缩小规模716x1280mp4 视频到358x640 原件的一半 我使用的命令是 ffmpeg i input mp4 vf scale 640 640 force original aspect ratio decre
  • 使用 html 表收集提交表单中的各种数据

    我有一个 jsp 页面 其中包含一个表 分页并带有顺序列 一个搜索字段和其他基于复选框的过滤器 这样 当我单击按钮时 它会采用表格的分页 表格的顺序 搜索字段中的值以及最终的其他参数 复选框 来执行查询 目前 该表具有分页和使用标签库排序的
  • 一对多关系未显示在对象放大架构定义中

    我刚开始将 amplify 与 GraphQL 结合使用 我正在设置数据库模式并在运行放大推送后自动生成函数 我想要实现但不知道如何实现的目标 我希望能够在 getUser 返回的对象中获取用户的所有连接信息 一对一和一对多关系 我希望仍然
  • Windows Phone 8 开始屏幕磁贴大小和边距

    我想知道是否有人知道新的 Windows Phone 8 Startscreen 480x800 的确切尺寸 即边距 顶部 左侧和右侧 图块之间 以及所有三种不同图块尺寸的边缘长度 For 720p 1280 720 and WXGA 12
  • 可以解析Delphi XMLDoc格式并构建在线帮助的工具

    API 文档的 XMLDoc 工具解释如下 http edn embarcadero com article 32770 http edn embarcadero com article 32770 是否有任何免费或商业工具可用于创建基于
  • getActivity() 在我的 ActivityInstrumentationTestCase2 类中返回 null

    我希望我的应用程序使用 ActivityInstrumentationTestCase2 在代码中执行以下测试 问题是 getActivity 方法返回 null 这会导致包含 getActivity 的行正下方的行出现 NullPoint
  • PHP检查字符串是否包含多个单词

    我在互联网上查找了一些可以做到这一点的东西 但它只能用一个词来实现 我正在尝试构建一个脚本来检测我的网站的错误用户名 如果用户名包含数组中的任何单词 则将检测到错误的用户名 这是我编写的代码 但未能运行 bad words array yo
  • 如何在 android 中使用 XML 形状创建向右箭头(V 形)? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 How to create a right facing arrow using xml shapes in android like
  • 如何使用 MvvmCross 创建 MasterDetailPage?

    我正在尝试使用 MvvmCross 开发 Xamarin Forms 应用程序 并且我想使用汉堡菜单 MasterDetailPage 但我不知道该怎么做 我尝试了不同的方法 搜索教程和示例 但没有成功 谁能帮我 正如你在这里看到的Mvvm