6

我有一个应用程序,其中大部分控件都是在代码中创建的,然后使用 AddView 方法添加到布局中。框架是否允许使用代码将 ViewModel 属性绑定到控件,或者只能在 axml 文件中完成?

4

2 回答 2

10

好吧,经过一番挣扎,我终于得到了答案。

我必须做以下事情。

1)添加了导入语句:

using Cirrious.MvvmCross.Binding.BindingContext;

2)添加以下代码:

protected override void OnCreate(Bundle bundle)
{
    base.OnCreate(bundle);
    SetContentView(Resource.Layout.Hello);

    TableLayout containerLayout = this.FindViewById<TableLayout>(Resource.Id.containerLayout);
    if (containerLayout != null)
    {                          
        TableRow newRow = new TableRow(base.ApplicationContext);
        newRow.SetMinimumHeight(50);

        var txtRace = new EditText(ApplicationContext);
        txtRace.Hint = "Race";

        var bindingSet = this.CreateBindingSet<HelloView, HelloViewModel>();
        bindingSet.Bind(txtRace).To(vm => vm.Race);
        bindingSet.Apply();

        newRow.AddView(txtRace);
        containerLayout.AddView(newRow);
    }
}

我的 HelloView.axml 文件中已经有一个“TableLayout”,我在其中所做的只是创建一个新的 EditText 框控件(txtRace)并将其添加到视图中,同时将其绑定到“Race”属性HelloViewModel 对象。

我花了很多时间试图弄清楚 CreateBindingSet() 方法存在于哪个命名空间中,因为 VS2012 没有给我任何智能。

希望这可以帮助面临类似问题的人。

于 2013-07-19T04:12:34.730 回答
2

是的 MvvmCross 支持将属性绑定到在运行时创建的控件。您可以观看令人敬畏的 Stuart 先生在他的 N+1 系列中的本教程。 http://www.youtube.com/watch?feature=player_embedded&v=cYu_9rcAJU4

注意:他在这个系列中多次展示过这个,但我现在记得这个在我的头顶上。

于 2013-07-18T04:40:57.267 回答