0

現在、mvvmcross vnext を使用しています。次のようにレイアウトにバインドされたリストアイテムがあります。

<TextView
        android:id="@+id/item_text"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:textAppearance="?android:attr/textAppearanceMedium"
        local:MvxBind="{'Text':{'Path':'Item.Name'}}" />

<TextView
        android:id="@+id/item_state_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="right|center_vertical"
        android:textAppearance="?android:attr/textAppearanceMedium" />

私がやりたいことは、ビューにバインディングを動的に設定することitem_state_textです。このようなもの:

if (<some_condition>) 
                myBinding = "{'Text':{'Path':'Item.LegacyStuff'}}";
TextView stateText = mvxBindableListItemView.FindViewById(Resource.Id.item_state_text) as TextView;
// create binding
            this.GetService<IMvxBinder>().Bind(this.ViewModel, stateText , myBinding );

どうすればそれを達成できますか

ありがとう

4

1 に答える 1

2

通常、私はこれを行いません - 特に ListItemViews の場合、これらはリスト全体で再利用され、バインディングが既に適用されているかどうかを判断するのは難しいため、条件付きでバインディングを追加しません。

代わりに私は使用します:

  • 条件付きビューを表示/非表示にする可視性バインディング、
  • または、条件付きテキスト変換を行うために ValueConverter を使用します。
  • または、カスタム アダプターを使用して、条件付きの決定に応じて異なる「セル」を表示します。

そうは言っても、各セル内で分離コードを使用して条件付きバインディングを生成し、vNext を使用して続行する場合は、次のようなコードを使用してそれを行うことができます。

var binder = this.GetService<IMvxBinder>();
var binding = binder.Bind(source, stateText, "{'Text':{'Path':'Item.LegacyStuff'}}").First();
BindingActivity.RegisterBinding(binding);

FluentBindingこの構文は、構文を使用してバインディングを生成できる v3 では簡単です- https://github.com/slodge/MvvmCross/wiki/Databinding#fluent

于 2013-09-30T14:51:09.653 に答える