2017-01-26 13 views
0

В моем проекте IOS У меня есть три страницы A, B, CInter страница связи

Приложение переходит от A -> B -> C.

Могу ли я опубликовать событие на А, который бы получать на страницах B и C, если эти страницы подписались на это событие, но пока не показаны?

ответ

0

Если вы находитесь на A и B и C еще не показаны, у них нет активных подписки на какие-либо события. Следовательно, они не будут получать события.

Также вы не можете положиться на этот шаблон, если хотите, чтобы это работало, например, на Android.

Вместо этого я бы рассмотрел возможность использования Сервиса, который является простым разрешимым синглетом, где вы можете хранить вещи, и пусть в ViewModels есть эта служба, введенная в ctor.

Что-то вроде этого:

public interface IMyService 
{ 
    string Data { get; set; } 
} 

public class MyService : IMyService 
{ 
    public string Data { get; set; } 
} 

Затем в ViewModel для А:

public class AViewModel : MvxViewModel 
{ 
    public AViewModel(IMyService service) 
    { 
     GoToBCommand = new MvxCommand(() => { 
      // set data before navigating 
      service.Data = SomeData; 
      ShowViewModel<BViewModel>(); 
     }); 
    } 

    public ICommand GoToBCommand { get; } 
} 

ViewModel для View B:

public class BViewModel : MvxViewModel 
{ 
    private readonly IMyService _service; 
    public BViewModel(IMyService service) 
    { 
     _service = service; 
    } 

    public void Init() 
    { 
     // read data on navigation to B 
     var data = _service.Data; 
    } 
} 

В качестве альтернативы, если вы только прохождение небольшие значения, такие как Id, вы можете использовать запрос pa араметры:

ShowViewModel<BViewModel>(new { id = SomeProperty }); 

Тогда в ВМ:

public void Init(string id) 
{ 
    // do stuff with id 
}