2

XCode を使用して作成した単純なビューがあります (これは XIB です)。2 つの UITextView コントロールと UIButton で構成されます。UITextView コントロールを Outlets として公開し、名前を付けました。View.designer.cs ファイルでは、すべてが適切に表示されます。

次の構文を使用してバインディングを作成しています。

        this.AddBindings(
            new Dictionary<object, string>()
            {
                {lastname, "{'Text':{'Path':'LastName','Mode':'TwoWay'}}"},
                {uservin, "{'Text':{'Path':'CarVIN','Mode':'TwoWay'}}"}

            });

lastname UITextView から uservin UITextView に移動すると、ビューモデルの SETTER が呼び出されることを期待していますが、そうではありません。ボタンをクリックして ViewModel の 2 つのテキスト プロパティの値を確認すると、両方とも null です。

私が間違ったことを誰か知っていますか?火曜日に簡単なデモが予定されており、他のすべてのプラットフォームは問題なく動作していますが、この問題を解決できないようです.

乾杯、

/j

4

1 に答える 1

3

問題はインスタンスを使用していることだと思いUITextViewます...しかし、 mvvmcross vnext はUITextField要素の双方向バインディングのみで出荷されます。

UITextView双方向バインディングを古い mvvmcross バージョンに追加するには:

  1. カスタム ターゲット バインディング クラスを追加します - v3 の次のようなものです

  2. 次のようなコードで Setup.cs 中に登録します。

    protected override void FillTargetFactories(IMvxTargetBindingFactoryRegistry registry)
    {
        base.FillTargetFactories(registry);
    
        registry.RegisterFactory(new MvxSimplePropertyInfoTargetBindingFactory(typeof(MvxUITextViewTextTargetBinding), typeof(UITextView), "Text");
    }
    

あるいは (ただし、すぐにデモを行う前ではないかもしれません)、v3 ベータ リリースへの更新を検討することもできます。


ちなみに、'swiss' バインディング構文を使用することは、現在では通常、これを行う通常の方法です。

    this.AddBindings(
        new Dictionary<object, string>()
        {
            {lastname, "Text LastName"},
            {uservin, "Text CarVIN"}
        });

...そしてTwoWayバインディングは、ほとんどの非 Windows MvvmCross バインディングのデフォルトです。

于 2013-04-05T19:08:11.197 に答える