Обновление MVVMcross с 4 до 6.2.1 с ошибкой Mvx не содержит определения ошибки Close Trace Error, предупреждения и т. Д. - PullRequest
0 голосов
/ 29 октября 2018

после обновления на mvvmcross 6.2.1 при получении ошибки Mvx не содержит определения следов, предупреждений, ошибок и т. д.

1 Ответ

0 голосов
/ 29 октября 2018

С Mvx 4 многое изменилось. Вы должны прочитать документацию , блоги и руководства по миграции ( от 4 до 5 , из 5 до 6 ).

О трассировках, предупреждениях, ошибках, теперь у Mvx появился новый способ Диагностика и ведение журнала . Вы должны ввести / разрешить 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());
    }
}

Если вы не хотите ничего возвращать, просто сделайте _navigationService.Close(this) (конечно, для этого вам нужно удалить параметр общего типа MyReturnObject) и все.

Е.И.В.

...