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 オブジェクトの。

VS2012 はそれに関する情報を提供していなかったため、どの名前空間に CreateBindingSet() メソッドが存在するかを把握するのに多くの時間を費やしました。

これが同様の問題に直面している人に役立つことを願っています。

于 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 に答える