2017-01-26 4 views
0

In meinem iOS Projekt, das ich drei Seiten A, B, C habenInter Seite Kommunikation

Die App von A navigiert -> B -> C

Kann ich eine Veranstaltung zu einem dem veröffentlichen würde auf Seite B und C empfangen werden, wenn diese Seiten dieses Ereignis abonniert haben, aber noch nicht angezeigt werden?

Antwort

0

Wenn Sie auf A und B und C sind noch nicht gezeigt worden ist, kann sie nicht aktiv Abonnements für alle Veranstaltungen. Daher werden sie die Ereignisse nicht erhalten.

Sie können sich auch nicht auf dieses Muster verlassen, wenn Sie möchten, dass dies unter Android funktioniert.

Stattdessen würde ich in Betracht ziehen, einen Dienst zu verwenden, der ein einfacher auflösbarer Singleton ist, wo Sie Zeug speichern können, und den ViewModels diesen Service in den ctor injizieren lassen.

Etwas wie folgt aus:

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

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

Dann in Ihrem Viewmodel für Ansicht A:

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

    public ICommand GoToBCommand { get; } 
} 

Ansichtsmodell für 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; 
    } 
} 

Alternativ, wenn Sie nur vorbei kleine Werte wie eine ID, könnten Sie Anfrage pa verwenden meter:

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

Dann in Ihrer VM:

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