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);

此语法在 v3 中更容易,您可以使用该FluentBinding语法生成​​绑定 - https://github.com/slodge/MvvmCross/wiki/Databinding#fluent

于 2013-09-30T14:51:09.653 回答