2013-11-21 8 views
5

ho il mio ViewController comeProgressHUD e TouchUpInside

public partial class TestView 
     : MvxViewController 
{ 
...code here... 
} 

e io carico il mio prossimo ViewController sul pulsante dell'evento TouchUpInside così:

btnSearch.TouchUpInside += (object sender, EventArgs e) => { 
     BTProgressHUD.Show("test"); 
     ViewModel.GoParameterizedCommand.Execute(null); 
    }; 

quell'evento è definito in viewDidLoad. Il mio messaggio "test" è mostrato sul prossimo ViewController e non durante il caricamento di questo. Come posso mostrare quel messaggio durante il caricamento e non quando viene caricato il prossimo ViewController? Ho provato a utilizzare anche MBProgressHUD

btnSearch.TouchUpInside += (object sender, EventArgs e) => { 
     var hud = new MTMBProgressHUD (View) { 
      LabelText = "Waiting...", 
      RemoveFromSuperViewOnHide = true 
     }; 


     View.AddSubview(hud); 
     hud.Show (animated: true); 

     ViewModel.GoParameterizedCommand.Execute(null); 
    }; 

ma il comportamento è lo stesso.

risposta

2

Sembra che si stia provando a lavorare con ProgressHUD nel livello Visualizza. In MVVM-way devi creare una proprietà "Loading" nel tuo ViewModel e collegarla alla barra di avanzamento in View.

Ecco il video di un buon Stuart come fare: http://youtu.be/6fNXGErr9to

E qui è il codice di esempio: https://github.com/MvvmCross/NPlus1DaysOfMvvmCross/tree/master/N-34-Progress

+0

Questa soluzione sembra non essere una soluzione. L'ho provato Ho impostato una proprietà sul mio ViemModel quando è invocato il comando execute (come in github postato da te). Proprietà e progressoHud sono impostati correttamente. Il problema è che il pop up in attesa non viene mostrato durante il caricamento, ma viene caricato quando torno. (Esempio vista 1 -> vista 2 -> vista 1 ora è mostrata sulla vista 1 e non durante la prima transizione ...) –

2

che sto facendo qualcosa di simile in una delle mie applicazioni.

Ho una proprietà IsLoading nel mio ViewModel che ho impostato se qualcosa sta caricando e non. Poi nel mio ViewController Desidero registrarmi alle modifiche su Loading come questo:

ViewModel.WeakSubscribe(() => ViewModel.IsLoading, (sender, args) => 
{ 
    if (ViewModel.IsLoading) 
    { 
     ShowLoadingDialog("Loading Resource"); 
    } 
    else 
    { 
     DismissLoadingDialog(); 
    } 
}); 

void ShowLoadingDialog(string text) 
{ 
    DismissLoadingDialog(); 
    BTProgressHUD.Show(text, -1, BTProgressHUD.MaskType.Black); 
} 

void DismissLoadingDialog() 
{ 
    if (BTProgressHUD.IsVisible) 
     BTProgressHUD.Dismiss(); 
} 

faccio questo in ViewDidLoad(). Potresti fare qualcosa di simile nella tua prima vista, poi nel tuo secondo puoi semplicemente chiamare DismissLoadingDialog() o semplicemente assicurarti di chiamare ViewWillDisappear() o ViewDidDisappear(), nel primo ViewModel, in modo che venga rimosso correttamente.

2

Il caricamento del controller di visualizzazione non richiederà più "Micro secondi". Il caricamento dei dati nel controller della vista richiederà un po 'di tempo e durante questo periodo è necessario mostrare che ProgressHUD.

Se si caricano i dati in "First View Controller", quindi all'avvio il caricamento dei dati inizia con ProgressHud con BTProgressHUD.Show("test"); e quando i dati sono terminati il ​​caricamento rimuove l'HUD dalla vista prima di accedere al "controller della seconda visualizzazione".

E se si stanno caricando i dati in "Second View Controller", quindi effettuare prima la navigazione da "First View Controller" a "Second View Controller" e quindi mostrare l'HUD appena prima di caricare i dati in Second view controller BTProgressHUD.Show("test"); e rimuoverlo dopo che i dati sono stati caricati.