MvvmCross:以编程方式向CollectionView的子视图添加视图

时间:2013-09-12 10:50:01

标签: iphone ios mvvmcross

根据用户操作,我想动态地将视图(在MvxViewController中)添加到CollectionView的子视图集合中。这就是我正在做的事情:

不起作用:SubviewThree继承MvxViewController

var mvxViewController = new SubviewThree();  // SubviewThree inherits MvxViewController
var uiView = mvxViewController.View;
uiView.ClipsToBounds = true;
uiView.Hidden = false;
uiView.Frame = new RectangleF(0, 0, 320, 200);
CollectionView.AddSubview(uiView);
CollectionView.BringSubviewToFront(uiView);

Works:SubviewThree继承UIViewController

var mvxViewController = new SubviewThree();  // SubviewThree inherits UIViewController
var uiView = mvxViewController.View;
uiView.ClipsToBounds = true;
uiView.Hidden = false;
uiView.Frame = new RectangleF(0, 0, 320, 200);
CollectionView.AddSubview(uiView);
CollectionView.BringSubviewToFront(uiView);

使用:

var label = new UILabel();    // All simple controls work just fine
label.Text = "Test Label";
label.ClipsToBounds = true;
label.Hidden = false;
label.Frame = new RectangleF(0, 0, 320, 200);
CollectionView.AddSubview(label);
CollectionView.BringSubviewToFront(label);

在MvvmCross实现这一目标的最佳方法是什么?请注意,我不能在这里使用数据绑定(并通过视图模型的ObservableCollection添加它),因为要添加的视图取决于用户操作 - 它可能不是同一类型。

这是我正在尝试做的事情:

Nested views in collection view

在右/左按钮触摸时,我想交换视图。视图绑定到不同的视图模型。交换视图可以是V1类型(具有条形和另一个UIView)或其他类型(仅仅是UIView)。

这是我的示例项目的github链接,以防万一上面的图像不清楚。您只需运行该应用程序,然后单击“添加”按钮。将视图添加到子视图的代码在BarCell.cs第158行。我已经评论了上面提到的代码行。

Github Link

1 个答案:

答案 0 :(得分:1)

为了让MvvmCross创建View并将其与ViewModel挂钩,MvvmCross使用MvxViewModelRequest对象。在iOS中,它使用View属性连接到Request

如果您愿意,可以自己挂钩 - 这只是get / set属性,必须在ViewDidLoad出现之前设置 - 请参阅IMvxTouchView.cs

可替换地: