如何在另一个布局中以动态方式创建和添加MvxFrameControl视图

时间:2017-03-31 15:50:55

标签: mvvmcross

如何动态创建视图并将其添加到当前视图的特定区域,例如创建和添加orroids MvxFrameControl?

我在Android上需要一些

 var frameHelpControl = (MvxFrameControl)ViewFactory.CreateByModel(frameHelpControlModel);
 regionForHelpFrame.AddView(frameHelpControl, new ViewGroupParameters(.....));

我需要能够通过DI Factory按模型创建View并将其添加到任何区域。我知道在标准主持人中有这样的工厂,但如果我需要在没有演示者的情况下为我创建控制器怎么办?

例如,我在旧iOS项目中有代码

 private void AddBubble(BubbleMC newBubbleModel)
 {
       var bubble = (BubbleVC)ViewContollerFactory.ViewControllerByModel(newBubbleModel, true);            
       bubble.View.Frame = View.Bounds;            
       AddChildViewController(bubble);
       Add(bubble.View);
       bubble.DidMoveToParentViewController(this);
 }

如何在MvvmCross Android / iOS上重写它(我认为它会相同),它将继承MvxFrameControl并需要在View中添加。

1 个答案:

答案 0 :(得分:1)

您可以像这样加载ViewModel:

var loaderService = Mvx.Resolve<IMvxViewModelLoader>();
var viewModelRequest = MvxViewModelRequest<MyViewModel>.GetDefaultRequest();
var viewModel = loaderService.LoadViewModel(viewModelRequest, null);

然后你可以创建一个MvxFrameControl并为BindingContext分配新创建的ViewModel。

但是,您应该依赖于Android上的RecyclerView和iOS上的TableView / CollectionView等机制,而不是创建视图并添加到父视图。