2016-05-05 12 views
2

私は最近、MVVM Lightの作業を開始し、IDialogServiceを初めて使用しました。Xamarin.Forms MVVM Light IDialogService ShowMessageネイティブ例外をスローする

この例外を発生させている
await _dialogService.ShowMessage("test", "test", "Ok", "Nop", (result) => { 
    if (result) 
    { 
     //... 
    } 
    else 
    { 
     //... 
    } 
}); 

Java.Lang.NullPointerException: Attempt to invoke virtual method 
'android.content.res.Resources$Theme android.content.Context.getTheme()' 
on a null object reference 
ShowMessageを使用して

マイViewModelLocator

ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default); 

// Register the dialog service provided by mvvm light 
SimpleIoc.Default.Register<IDialogService, DialogService>(); 

私のViewModel

private IRestService _restService; 

public OrderViewModel (IDialogService dialogService) 
{ 
    _dialogService = dialogService; 
} 

そして最後に

誰かが私に何が起こっているか教えてもらえますか?

+0

は、あなたの活動がMVVM光の 'ActivityBase'から継承んそれを登録することができますか? –

+0

どのアクティビティでですか? – FriedSloth

+1

私の答えを参照してください –

答えて

1

問題は、現在の活動が設定されていないと思います。問題は、MvvmLightがActivityBaseであることがCurrentActivityであることです。だから私はDialogServiceフォームは実質的にフォームと互換性がないと思うので、フォームはFormsAppCompatActivityから継承する必要があります。 C#は多重継承をサポートしていないので、それは可能ではない素晴らしいダイヤモンド型の継承を構成します。

だから、ACRユーザーDaialogsを使用することができます。https://www.nuget.org/packages/Acr.UserDialogs/

は、セットアップのためにhttps://github.com/aritchie/userdialogs#android-initialization-in-your-main-activityを参照してください。

そして、あなたは

SimpleIoc.Default.Register<IUserDialogs>(UserDialogs.Instance); 
+0

私はacrユーザーダイアログをbevore、私は使用しましたちょうど私がmvvmのライトから既に実装されたユーザダイアログを使用できると思った。 – FriedSloth