在MvvmCross monodroid Activity中插入Monogame视图

时间:2012-11-02 18:39:51

标签: xamarin.ios xamarin.android xamarin mvvmcross monogame

我正在尝试从MvvmCross monodroid Activity视图中的RelativeLayout中构建Monogame视图。

Android Activity继承自Microsoft.Xna.Framework.AndroidGameActivity,以便能够在RelativeLayout(工作)中运行Monogame。

我的MvvmCross活动继承自MvxBindingActivityView(正在工作)。

所以,我需要一种方法来运行游戏并在同一活动中绑定一些数据。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

简而言之,您可以通过继承某些接口,然后剪切并粘贴少量代码来将任何Activity转换为MvxActivity,这些代码执行ViewModel的基本加载和分配。

e.g。请参阅#RegionIMvxAndroidView<TViewModel>添加,以便从正常Activity生成MvxActivityView.cs

e.g。它是用于将Google MapActivity等专门活动调整为MvxMapActivityView.cs

的相同区域和界面

在此级别,活动/视图的ViewModel可以在C#代码中使用,但没有聪明的xml通胀 - 它没有聪明的Binding支持。

代码可以在这个级别编写 - 我已经发布了没有绑定的应用程序 - 但许多用户也喜欢添加DataBinding ......


要添加此DataBinding支持,您需要添加更多代码,这些代码提供BindingInflate,绑定存储,绑定处理等。

e.g。原始MvxActivityView使用IMvxBindingActivity界面和#region扩展,如:MvxBindingActivityView.cs

e.g。 MvxMapActivityView使用相同的区域和界面进行了扩展:MvxBindingMapActivityView.cs


所以要扩展自定义AndroidGameActivity

  1. 继承AndroidGameActivity以获取ViewModelOwningGameActivity<T>并剪切并粘贴IMvxAndroidView<TViewModel>界面和#region MvxActivityView<T>以提供ViewModel方法,字段和属性。
  2. 然后假设你想要绑定:

    1. 继承ViewModelOwningGameActivity<T>以获取BindingGameActivity<T>并剪切并粘贴IMvxBindingActivity#region MvxBindingActivityView<T>以获取绑定方法

    2. 对于专业活动,您可能需要添加更多内容 - 例如您可以为MapActivity添加一些自定义辅助方法来绘制点和线,或者为GameActivity添加任何游戏 ......但这取决于单个实现。


      对于调整活动所需的代码剪切和粘贴感到抱歉 - 我试图将此保持在最低限度。但是,到目前为止,编写Mvx已经有一次我真的想在C#中使用多重继承或混合