Ios 从插件内部显示ViewController

Ios 从插件内部显示ViewController,ios,plugins,touch,viewmodel,mvvmcross,Ios,Plugins,Touch,Viewmodel,Mvvmcross,我无法从插件内部显示视图模型(在插件内部创建)。例如,我不想像模式视图那样显示它,我想显示应用程序开发的任何内容。如果它是使用UINavigation开发的,则按下它,如果它是tab,则设置它 所以,我尝试的是: 在插件中创建我的ViewModel public partial class MyViewModel : MvxViewController { private string Option1; public class Nav { public

我无法从插件内部显示视图模型(在插件内部创建)。例如,我不想像模式视图那样显示它,我想显示应用程序开发的任何内容。如果它是使用UINavigation开发的,则按下它,如果它是tab,则设置它

所以,我尝试的是:

在插件中创建我的ViewModel

public partial class MyViewModel : MvxViewController
{
    private string Option1;

    public class Nav
    {
        public string option1 { get; set; }
    }

    public void Init(Nav navigation)
    {
        Option1 = navigation.option1;       }

    public MyViewModel () : base ("MyViewModel", null)
    {
    }

    //My View model..
}
并称之为:

public void CallMyViewModel()
{
        var parameterBundle = new MvxBundle((new MyViewModel.Nav 
        {
            option1 = "option1",
        }.ToSimplePropertyDictionary()));

        var mvxViewModelRequest = new MvxViewModelRequest (typeof(MyViewModel), parameterBundle, null, null);
        Mvx.Resolve<IMvxViewDispatcher> ().ShowViewModel (mvxViewModelRequest)
 }
使用此stacktrace:

     at Cirrious.MvvmCross.Views.MvxViewsContainer.GetViewType (System.Type viewModelType) [0x00000] in <filename unknown>:0 
  at Cirrious.MvvmCross.Touch.Views.MvxTouchViewsContainer.CreateView (Cirrious.MvvmCross.ViewModels.MvxViewModelRequest request) [0x00000] in <filename unknown>:0 
  at Cirrious.MvvmCross.Touch.Views.MvxCanCreateTouchViewExtensionMethods.CreateViewControllerFor (IMvxCanCreateTouchView view, Cirrious.MvvmCross.ViewModels.MvxViewModelRequest request) [0x00000] in <filename unknown>:0 
  at Cirrious.MvvmCross.Touch.Views.Presenters.MvxTouchViewPresenter.Show (Cirrious.MvvmCross.ViewModels.MvxViewModelRequest request) [0x00000] in <filename unknown>:0 
  at Cirrious.MvvmCross.Touch.Views.MvxTouchViewDispatcher+<>c__DisplayClass4.<ShowViewModel>b__3 () [0x00000] in <filename unknown>:0 
  at Cirrious.MvvmCross.Touch.Views.MvxTouchUIThreadDispatcher.RequestMainThreadAction (System.Action action) [0x00000] in <filename unknown>:0 
  at Cirrious.MvvmCross.Touch.Views.MvxTouchViewDispatcher.ShowViewModel (Cirrious.MvvmCross.ViewModels.MvxViewModelRequest request) [0x00000] in <filename unknown>:0 
  at Thrust.Plugins.Touch.MvxPluginService.CallMyViewModel (T) [0x0004e] in /Users/gbastos/Documents/Gabriel Docs/Development/ThrustPlugins/Plugins/Thrust.Plugins.Touch/MvxPluginService.cs:471 
  at Thrust.Plugins.Test.Core.ViewModels.FirstViewModel.CallMyViewModel () [0x00047] in /Users/gbastos/Documents/Gabriel Docs/Development/ThrustPlugins/Plugins/Thrust.Plugins.Test.Core/ViewModels/FirstViewModel.cs:123 
  at Cirrious.MvvmCross.ViewModels.MvxCommand.Execute (System.Object parameter) [0x00000] in <filename unknown>:0 
  at Thrust.Plugins.Test.Touch.FirstView.ShowMyViewModel (Foundation.NSObject sender) [0x0000d] in /Users/gbastos/Documents/Gabriel Docs/Development/ThrustPlugins/Plugins/Thrust.Plugins.Test.Touch/Views/FirstView.cs:25 
  at (wrapper managed-to-native) UIKit.UIApplication:UIApplicationMain (int,string[],intptr,intptr)
  at UIKit.UIApplication.Main (System.String[] args, IntPtr principal, IntPtr delegate) [0x00005] in /Developer/MonoTouch/Source/monotouch/src/UIKit/UIApplication.cs:62 
  at UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x0001c] in /Developer/MonoTouch/Source/monotouch/src/UIKit/UIApplication.cs:45 
  at Thrust.Plugins.Test.Touch.Application.Main (System.String[] args) [0x00008] in /Users/gbastos/Documents/Gabriel Docs/Development/ThrustPlugins/Plugins/Thrust.Plugins.Test.Touch/Main.cs:16
位于cirrius.MvvmCross.Views.MvxViewsContainer.GetViewType(System.Type viewModelType)[0x00000]中:0
在Cirries.MvvmCross.Touch.Views.MvxTouchViewsContainer.CreateView(Cirries.MvvmCross.ViewModels.MvxViewModelRequest请求)[0x00000]中:0
在Cirries.MvvmCross.Touch.Views.MvxCanCreateTouchViewExtensionMethods.CreateViewControllerFor(IMvxCanCreateTouchView视图,Cirries.MvvmCross.ViewModels.MvxViewModelRequest请求)[0x00000]中:0
在Cirries.MvvmCross.Touch.Views.Presenters.MvxTouchViewPresenter.Show(Cirries.MvvmCross.ViewModels.MvxViewModelRequest请求)[0x00000]中:0
在cirriary.MvvmCross.Touch.Views.MvxTouchViewDispatcher+c__DisplayClass4.b_uu 3()[0x00000]中:0
在cirrius.MvvmCross.Touch.Views.MvxTouchUIThreadDispatcher.RequestMainThreadAction(System.Action操作)[0x00000]中:0
在Cirrious.MvvmCross.Touch.Views.MvxTouchViewDispatcher.ShowViewModel(Cirrious.MvvmCross.ViewModels.MvxViewModelRequest请求)[0x00000]中:0
在/Users/gbastos/Documents/Gabriel Docs/Development/pushplugins/Plugins/推力.插件.Touch/MvxPluginService.CallMyViewModel(T)[0x0004e]中
在/Users/gbastos/Documents/Gabriel Docs/Development/strusthplugins/Plugins/推力.Plugins.Test.Core.ViewModels.FirstViewModel.CallMyViewModel()[0x00047]中
在cirrius.MvvmCross.ViewModels.MvxCommand.Execute(System.Object参数)[0x00000]中:0
在/Users/gbastos/Documents/Gabriel Docs/Development/pushplugins/Plugins/推力插件/推力插件.Test.Touch/Views/FirstView.cs:25中的推力插件.Test.Plugins.Test.FirstView.ShowMyViewModel(Foundation.NSObject sender)[0x0000d]
在(包装器管理为本机)UIKit.UIApplication:UIApplicationMain(int,string[],intptr,intptr)
在/Developer/MonoTouch/Source/MonoTouch/src/UIKit/UIApplication.Main中的UIKit.UIApplication.Main(System.String[]args,IntPtr主体,IntPtr委托)[0x00005]
在/Developer/MonoTouch/Source/MonoTouch/src/UIKit/UIApplication.cs:45中的UIKit.UIApplication.Main(System.String[]参数,System.String principalClassName,System.String delegateClassName)[0x0001c]处
在/Users/gbastos/Documents/Gabriel Docs/Development/struthplugins/Plugins/推力插件/strutch.Plugins.Test.Touch.Application.Main(System.String[]args)[0x00008]中

如果您的视图真的可以跨应用程序重用,那么您可以通过在
IMvxViewsContainer
中注册来访问它。要做到这一点,您可以在Touch插件程序集中添加一些代码,例如:

    Mvx.CallbackWhenRegistered<IMvxViewsContainer>(() => {
       var container = Mvx.Resolve<IMvxViewsContainer>();
       container.Add<MyViewModel, MyView>();
    });
Mvx.callbackwhen注册(()=>{
var container=Mvx.Resolve();
container.Add();
});

请参见

中的接口定义您是否尝试覆盖GetViewAssembly并添加包含视图的程序集名称?在此页面中向下滚动至“提供其他视图和视图模型部件”。。是的,这是我的案子。我有一个可以在我的应用程序中重用的视图。成功了。谢谢你,斯图尔特
    Mvx.CallbackWhenRegistered<IMvxViewsContainer>(() => {
       var container = Mvx.Resolve<IMvxViewsContainer>();
       container.Add<MyViewModel, MyView>();
    });