axml MVVMCROSS中嵌入式布局的绑定问题

时间:2017-10-03 13:02:21

标签: c# android-layout xamarin mvvmcross

我的布局是有点页脚视图,几乎包含在所有布局中。

假设我们举一个不直接出现在活动布局中的textview示例,而不是布局中包含的不同布局。

示例案例:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:layout_marginTop="0dp"
    android:layout_gravity="bottom"
    android:gravity="bottom|center">
    <ImageView
        android:id="@+id/img_awesome_intro"
        android:layout_width="match_parent"
        android:layout_height="@dimen/dp_awesome_intro"
        android:layout_marginBottom="@dimen/dp_awesome_intro_margin_bottom"
        android:scaleType="fitXY"
        android:src="@drawable/ic_welcome_intro" />
    <include
        layout="@layout/BarButton"
        android:id="@+id/btn_welcome_join"
        android:layout_width="fill_parent"
        android:layout_height="@dimen/dp_awesome_learnmore_size" />
    <include
        layout="@layout/BarButton"
        android:layout_width="fill_parent"
        android:id="@+id/btn_welcome_learnmore"
        android:layout_height="@dimen/dp_awesome_learnmore_size" />
</LinearLayout>

包含的BarButton布局如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:background="#229DCF"
    android:orientation="horizontal"
    android:paddingLeft="15dp"
    android:paddingRight="@dimen/dp_button_margin_right"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="right"
        android:textSize="@dimen/sp_button_title"
        android:textColor="@color/white"
        android:layout_gravity="center_horizontal|center_vertical"
        android:id="@+id/titleLbl" />
    <ImageView
        android:id="@+id/iconImg"
        android:layout_width="@dimen/dp_button_imgsize"
        android:layout_height="@dimen/dp_button_imgsize"
        android:layout_marginTop="5px"
        android:layout_marginLeft="@dimen/dp_button_margin_betweentxt"
        android:layout_gravity="center_horizontal|center_vertical"
        android:src="@drawable/ic_forward_arrow" />
</LinearLayout>

我的问题是如何将Textview click事件绑定到viewmodel的命令 此文本视图存在于BarButton布局中,而不是直接在活动布局中。

1 个答案:

答案 0 :(得分:2)

您仍然可以绑定到TextView。 include只是Android's layout system提供的一种模式,用于创建可重用的布局。创建布局树时,它会将include中定义的元素添加到现有布局中。

  

要有效地重复使用完整版面,您可以使用<include/>和   <merge/>标记以在当前布局中嵌入另一个布局

然后,您可以使用XML或Fluent绑定来执行命令。

XML binging

<TextView
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:gravity="right"
    android:textSize="@dimen/sp_button_title"
    android:textColor="@color/white"
    android:layout_gravity="center_horizontal|center_vertical"
    android:id="@+id/titleLbl"
    app:MvxBind="Click MyCommand"/>

Fluent binding

var title = FindViewById<TextView>(Resource.Id.titleLbl);

...

bindingSet.Bind(title)
    .For(c => c.BindClick())
    .To(vm => vm.MyCommand)
    .Apply();

如果要在ViewModel(页面/布局)之间减少此命令的重复,可以在基类中共享ViewModel命令。