我现在正在使用mvvmcross vnext。 我在布局中绑定了一个listitem,如下所示:
<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 );
我怎样才能实现
由于
答案 0 :(得分:2)
通常我不会这样做 - 我不会有条件地添加绑定,特别是在ListItemViews的情况下,因为这些绑定会在列表中重复使用,并且很难确定绑定是否已经应用。< / p>
相反,我会使用:
话虽如此,如果你想在每个单元格中使用代码隐藏生成条件绑定,并且你想继续使用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