【问题标题】:In MVVMCross 5, how can I navigate backward multiple pages?在 MVVMCross 5 中,如何向后导航多个页面?
【发布时间】:2017-10-25 02:20:28
【问题描述】:

在此示例中,唯一的 Person 由其 FirstName 和 LastName 定义。 PageA 是一种选择唯一 Person 的表单。 PageB 是唯一名字的列表,PageC 是给定名字存在的所有姓氏的列表。

我很难使用 MvxNavigationService 解决特定的 UX 模式。这是我正在尝试做的事情,(伪代码):

  • PageA.SelectedItem = NavigateTo(PageB) [Person 列表,分组 由Person.FirstName];
  • PageB.SelectedItem = NavigateTo(PageC) [为 Person.FirstNamePerson.LastName 列表,];
  • PageC.Close(SelectedItem);
  • PageB.Close(SelectedItem);

当我实际尝试实现它并在 Android 上运行它时,视图模型逻辑会执行,但 UI 不显示 PageA

更新:调用PageB.Close() 会导航回PageC,因为PageC 是上一页。也许可以通过确保在关闭堆栈时将PageC 从堆栈中删除来解决问题。这如何实现?

【问题讨论】:

  • 也在寻找使用新的 MvxNavigationService 时以编程方式从导航堆栈中删除视图的解决方案

标签: xamarin xamarin.android mvvmcross


【解决方案1】:

有很多方法可以做到这一点,在 iOS 上使用自定义 ViewPresenter 或在 Android 上使用 Activity。

我为一小对(2 个视图模型)实现此目的的一种方法是向打开第二个 ViewModel 的第一个 ViewModel 添加一个 Instance 静态变量,如下所示:

public class FirstViewModel
{
    public static FirstViewModel Instance;
    public void FirstViewModel()
    {
        Instance = this;
        ...
    }
}

然后在第二个 ViewModel 的保存/关闭命令中,我像这样关闭了两个 ViewModel 并且它起作用了:

public new MvvmCross.Commands.IMvxCommand SaveClickCommand
{
    get
    {
        return new MvvmCross.Commands.MvxAsyncCommand(
            async () =>
            {
                await Navigator.Close(this);
                await Navigator.Close(FirstViewModel.Instance);
            }
        );
    }
}

【讨论】:

    猜你喜欢
    • 2017-11-13
    • 1970-01-01
    • 2014-05-13
    • 1970-01-01
    • 1970-01-01
    • 2011-12-11
    • 1970-01-01
    • 1970-01-01
    • 2016-07-07
    相关资源
    最近更新 更多