0

我正在尝试找到一种从堆栈中删除活动的方法-我们的应用程序中有一个流程:活动/视图模型 a -> 活动/视图模型 b -> 活动/视图模型 c。在 c 中,用户可以选择日期或返回。如果他回去,他应该回到b。但是,如果他选择了一个日期,他将被转发到活动/视图模型 b 的新实例,并且活动/视图模型 b 的“旧”实例已过时并且应该被删除。

Stuart Lodge 的一个建议(在类似的线程上,仅用于单声道触摸)是使用 RequestRemoveBackStep() 但我不知道如何使用它,我找不到一个例子。

谁能指出我正确的方向?

问候

4

1 回答 1

1

RequestRemoveBackStep()方法是IMvxViewDispatcher接口的成员,在某些平台上实现:

public interface IMvxViewDispatcher : IMvxMainThreadDispatcher
{
    bool RequestNavigate(MvxShowViewModelRequest request);
    bool RequestClose(IMvxViewModel whichViewModel);
    bool RequestRemoveBackStep();
}

来自https://github.com/slodge/MvvmCross/blob/vnext/Cirrious/Cirrious.MvvmCross/Interfaces/Views/IMvxViewDispatcher.cs

然而,总是这样做并不完全简单......例如,在 Droid 上,它目前实现为:

    public bool RequestRemoveBackStep()
    {
        // not supported on Android? Not sure how to do this currently...
        return false;
    }

来自https://github.com/slodge/MvvmCross/blob/vnext/Cirrious/Cirrious.MvvmCross.Droid/Views/MvxAndroidViewDispatcher.cs

记录了有关此功能的问题 - 例如https://github.com/slodge/MvvmCross/issues/80 - 但似乎此功能可能会从未来的 Mvx 实现中简单地删除 - 特别是因为它不是很容易做到每个平台上的每个视图。


如果您现在需要这种类型的功能,那么您需要找到自己的方式来实现此功能......取决于您的具体用例是什么(抱歉 - 我不清楚您当前用例的详细信息从问题)。

有几种可用的技术路线,包括:

  • 使用NoHistory标志
  • 使用RequestClose(oldviewModel)调用
  • 将逻辑添加到您的Presenter
  • 使用 aMessenger请求视图关闭自己。
于 2013-01-21T20:29:19.113 回答