2014-04-08 63 views
0

我在使用MvvmCross構建的應用程序中使用BTProgressHUD Xamarin組件。我目前正在開發iOS版本的應用程序。我的ViewModel進行了幾次Web服務調用,並公開了一個與相關視圖綁定的'IsBusy'屬性,以顯示或隱藏進度微調器。這與N = 34 MvvmCross樣本(https://github.com/MvvmCross/NPlus1DaysOfMvvmCross/tree/master/N-34-Progress)中的設置方式基本相同。MvvmCross:在ViewModel創建後立即顯示BTProgressHUD微調器

問題是,在某些情況下,ViewModel必須在創建後立即自動調用服務。我嘗試在ViewModel的Start()函數中進行調用,但我注意到BTProgressHUD微調器並未顯示在視圖之上。我懷疑問題是隻有在視圖已經可見之後才能顯示BTProgressHUD,並且在ViewModel.Start()運行時可能不是這種情況。

有沒有人遇到過這個?視圖變爲可見後,是否有一種簡單的方法可以在ViewModel中運行代碼?

謝謝。

回答

0

是否有一種簡單的方法在ViewModel中運行代碼後,視圖變得可見?

的N = 42視頻 - http://slodge.blogspot.co.uk/2013/11/n42-is-my-viewmodel-visible-can-i-kill.html - 引入了IVisible界面,您可以添加到您的ViewModel - 這是你的工作,從您View稱之爲 - 但這是很容易在每個平臺上做。例如,在iOS上使用ViewDidAppear/ViewDidDisappear來完成https://github.com/MvvmCross/NPlus1DaysOfMvvmCross/blob/master/N-42-Lifecycles/Lifecycle.Touch/Views/FirstView.cs

protected IVisible VisibleViewModel 
    { 
     get { return base.ViewModel as IVisible; } 
    } 

    public override void ViewDidAppear(bool animated) 
    { 
     base.ViewDidAppear(animated); 
     VisibleViewModel.IsVisible(true); 
    } 

    public override void ViewDidDisappear(bool animated) 
    { 
     base.ViewDidDisappear(animated); 
     VisibleViewModel.IsVisible(false); 
    }