将绑定的项目传递给MvxCommand

时间:2014-05-29 11:17:06

标签: mvvmcross

考虑以下代码:

<Mvx.MvxListView
    android:id="@+id/items_list"
    style="@style/ListNoDividers"
    android:layout_height="fill_parent"
    android:layout_width="fill_parent"
    android:layout_above="@+id/footer_panel"
    android:layout_below="@+id/intro_text"
    local:MvxBind="ItemsSource Items;ItemClick DoItCommand"
    local:MvxItemTemplate="@layout/item_template" />

我知道当我点击列表中的项目时,将调用DoItCommand并且绑定的项目将作为命令参数过去。

如何在非MvxListView中使用相同的内容,例如此代码段:

<LinearLayout
    android:id="@+id/item1"
    style="@style/ItemStyle"
    local:MvxBind="Click DoItCommand, CommandParameter=PropertyInViewModel"
    android:layout_marginBottom="@dimen/HalfDefaultInnerMargin" />
<LinearLayout
    android:id="@+id/item1"
    style="@style/ItemStyle"
    local:MvxBind="Click DoItCommand, CommandParameter=OtherPropertyInViewModel"
    android:layout_marginBottom="@dimen/HalfDefaultInnerMargin" />

底线是我需要使用命令参数将属性值传递给DoItCommand

1 个答案:

答案 0 :(得分:1)

正如评论中指出的那样,使用this的类似方法,解决了这个问题!

public class MyLinearLayout : LinearLayout
{
    public HhLinearLayout(Context context, IAttributeSet attrs)
        : base(context, attrs)
    {
        Click += LinearLayoutClick;
    }

    public ICommand Command { get; set; }

    public object CommandParameter { get; set; }

    private void LinearLayoutClick(object sender, EventArgs e)
    {
        var command = Command;
        var commandParameter = CommandParameter;

        if (command == null || !command.CanExecute(commandParameter))
        {
            return;
        }

        command.Execute(commandParameter);
    }
}