MVVMcross 从 4 升级到 6.2.1 出现错误 Mvx 不包含关闭跟踪错误、警告等的定义

MVVMcross upgrade from 4 to 6.2.1 getting error Mvx does not contain definition of Close Trace Error , warning etc

升级 mvvmcross 6.2.1 后出现错误 Mvx 不包含定义 痕迹、警告、错误等

自 Mvx 4 以来发生了很多变化。您应该阅读 documentation, blogs and migration guides (from 4 to 5, from 5 to 6)。

关于跟踪、警告、错误,现在 Mvx 有一个新的方法可以做 Diagnostic & Logging。你必须 inject/resolve IMvxLog 在那里你将拥有所有的方法来进行跟踪、警告、错误等。

public class MyViewModel : MvxViewModel
{
    private readonly IMvxLog _log;
    public MyViewModel(IMvxLog log)
    {
        _log = log;
    }

    private void SomeMethod()
    {
        _log.Trace("Some message");
    }
}

为了关闭视图模型,您需要使用新的 Navigation 系统:

public class MyViewModel : MvxViewModel
{
    private readonly IMvxNavigationService _navigationService;
    public MyViewModel(IMvxNavigationService navigation)
    {
        _navigationService = navigationService;
    }

    public override void Prepare()
    {
        // first callback. Initialize parameter-agnostic stuff here
    }

    public override async Task Initialize()
    {
        await base.Initialize();

        // do the heavy work here
    }

    public async Task SomeMethod()
    {
        var result = await _navigationService.Navigate<NextViewModel, MyObject, MyReturnObject>(new MyObject());
        //Do something with the result MyReturnObject that you get back
    }
}

public class NextViewModel : MvxViewModel<MyObject, MyReturnObject>
{
    private readonly IMvxNavigationService _navigationService;

    private MyObject _myObject;

    public MyViewModel(IMvxNavigationService navigation)
    {
        _navigationService = navigationService;
    }

    public override void Prepare()
    {
        // first callback. Initialize parameter-agnostic stuff here
    }

    public override void Prepare(MyObject parameter)
    {
        // receive and store the parameter here
        _myObject = parameter;
    }

    public override async Task Initialize()
    {
        //Do heavy work and data loading here
    }

    public async Task SomeMethodToClose()
    {
        await _navigationService.Close(this, new MyReturnObject());
    }
}

如果你想 return 什么都不做,只需做 _navigationService.Close(this)(当然你必须删除 MyReturnObject 的通用类型参数才能这样做)就是这样。