2015-12-03 34 views
1

我正在開發一個使用MVVM Cross的Xamarin移動應用程序。有兩個的ViewModels這是在做同樣的事情,即顯示使用下面的代碼對話框:如何在ViewModel中共享ShowViewModel類

var register = await UserDialogHelper.RaiseNotRegisteredAsync (UserDialogs); 
     if (register) { 
      ShowViewModel<WebViewModel> (new 
       { 
        url = Urls.RegisterPage, 
        title = "Register", 
       }); 
     } 

我想這個代碼遷移到靜態類,但未能解決ShowViewModel。任何人都可以建議如何解決非ViewModel類中的ShowViewModel?

回答

3

當您有方法或屬性共享相同的視圖。你可以實現一個基本的視圖模型。其他的只是從這個基礎視圖模型繼承而來。就像下面的例子:

public abstract class MyBaseViewModel : MvxViewModel 
{ 
    public void MyMethod() 
    { 
     // Your code 
     var register = await UserDialogHelper.RaiseNotRegisteredAsync (UserDialogs); 
     if (register) { 
      ShowViewModel<WebViewModel> (new 
      { 
       url = Urls.RegisterPage, 
       title = "Register", 
      }); 
     } 
    } 
} 

然後你的ViewModels是這樣的:

public class MyFirstViewModel : MyBaseViewModel 
{ 

} 

這裏面MyFirstViewModel你可以調用基方法MyMethod。等等...

編輯

如果你想從一個視圖/視圖模型外導航:從@SergioZgz看從斯圖爾特this answerthe answer here

+0

我想有一個共享類,帶有用於引發對話的方法的靜態類。 – Signcodeindie

+0

我編輯了我的答案。但我認爲,我的繼承方式應該是你的目標 – Joehl

0

ShowViewModel來自MvxNavigatingObject如果你的類不會繼承它,你不能使用它。

,你可以像這樣一類比不是MvxViewModel:

var viewDispatcher = Mvx.Resolve<IMvxViewDispatcher>(); 
viewDispatcher.ShowViewModel(new MvxViewModelRequest(
               vmtype, 
               parameterBundle, 
               presentationBundle, 
               requestedBy)); 

但是我覺得從Joehl這個問題的答案是correcty方式:)