Xamarin.Forms MVVM Light IDialogService ShowMessage抛出本机异常

时间:2016-05-05 13:23:54

标签: c# mvvm xamarin xamarin.forms mvvm-light

我最近开始使用MVVM Light,并且第一次使用了IDialogService。

我的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;
}

最后使用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 

有人能告诉我发生了什么事吗?

1 个答案:

答案 0 :(得分:1)

我认为问题是,目前的活动尚未确定。问题是,MvvmLight需要CurrentActivityActivityBase类型。所以我认为DialogService与Forms并不真正兼容,因为Forms要求Activity继承自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);