1

假设我有一个 ViewModel:

public class MyViewModel : MvxViewModel
{
    public override void Start()
    {
        base.Start();
        //Important things would happen here!
    }
}

当我现在ShowViewModel<MyViewModel>();从任何其他 ViewModel 使用时,它会从 MyViewModel进入被覆盖的Start()方法。

但是,当我从后退/返回按钮导航时,它不会进入。

BackButton 是这样构建的:

class MyPresenter : MvxModalSupportTouchViewPresenter
{
    public INMobileAdminPresenter(UIApplicationDelegate applicationDelegate, UIWindow window)
        : base(applicationDelegate, window)
    {
    }

    protected override UINavigationController CreateNavigationController (UIViewController viewController)
    {
        var toReturn = base.CreateNavigationController (viewController);
        toReturn.NavigationBarHidden = false;
        return toReturn;
    }
}

在 AppDelegate.cs 中,我正在执行以下操作:

[Register("AppDelegate")]
public partial class AppDelegate : MvxApplicationDelegate
{
    UIWindow window;

    public override bool FinishedLaunching(UIApplication app, NSDictionary options)
    {
        window = new UIWindow(UIScreen.MainScreen.Bounds);

        //var presenter = new MvxTouchViewPresenter(this, window);
        var presenter = new MyPresenter(this, window); //Here my Presenter instead of the standard one

        //and so far....
    }
}

每次从 ViewModel进入Start()方法对我来说很重要——无论我现在使用的是 ShowViewModel 还是导航来自 BackButton,因为我在那里订阅了一些相关的 Eventtaggregationmessages。

任何帮助表示赞赏!

4

1 回答 1

3

为什么导航到视图(后退按钮和 ShowViewModel)有区别?

Back 按钮导航是 iOS 的一部分 - 内置于UINavigationController

ShowViewModel导航是内置在 MvvmCross 中的。

Start调用是 MvvmCross ViewModel 构造机制的一部分 - 请参阅Wiki:ViewModels 是如何构造的- 因此它仅在构造新 ViewModel 时调用- 每次 ViewModel 的 View 可见时都不会调用它 - 可以通过 back, via标签切换等

如何解决?

如果您真的想更改 Back 导航以便它调用Start- 那么您需要进行更改Back以便它构造一个新的 ViewModel。您可能可以使用某种特殊形式UINavigationController(可能通过委托)和/或拦截左侧栏按钮项,以便它们执行ShowViewModel调用。根据您的 UI,您可能还需要拦截 UI 中的其他调用(例如,如果您正在使用选项卡、弹出窗口、片段或其他一些演示方法)。

或者,如果您只想拦截 View 事件,如OnNavigatedToViewWillAppearOnResume并将它们传递给您的 ViewModel,那么您可以通过使用来做到这一点Start,而是IActiveViewModel向您的 ViewModel 添加一些自定义接口,然后从您的适当挂钩中调用它意见。有关此方法的更多信息,请参阅以下内容:

于 2013-09-12T11:58:17.153 回答