MvvmCross Bind 命令到 <include> 工具栏

MvvmCross Bind command to <include> toolbar

我想将命令绑定到工具栏的项目。可能吗? 我试过了,还是不行

Toolbar.axml

<Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:local="http://schemas.android.com/apk/res-auto"
            android:background="@android:color/holo_blue_light"
            android:layout_width="match_parent"
            android:layout_height="85dp">

        <ImageButton
            android:src="@drawable/search"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/searchImageButton"
            android:layout_marginLeft="290dp"
            local:MvxBind="Click DoSearchCommand"
            android:background="@android:color/holo_blue_light" />

MainView.axml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:local="http://schemas.android.com/apk/res-auto"
          android:orientation="vertical"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent">
          <include
              layout="@layout/toolbar" />
</LinearLayout>

MainViewModel.cs

    private MvxCommand _searchCommand;
    public System.Windows.Input.ICommand SearchCommand
    {
        get
        {
            _searchCommand = _searchCommand ?? new MvxCommand(DoSearchCommand);
            return _searchCommand;
        }
    }
    private void DoSearchCommand()
    {
        ShowViewModel<SearchViewModel>();
    }

您绑定到 DoSearchCommand 但这就是方法。你应该绑定到 SearchCommand

local:MvxBind="Click SearchCommand"

作为改进,您也可以使用 IMvxCommand 而不是 ICommand,并将 ShowViewModel 添加为 lambda。

private MvxCommand _searchCommand;
    public IMvxCommand SearchCommand
    {
        get
        {
            _searchCommand = _searchCommand ?? new MvxCommand(() => ShowViewModel<SearchViewModel>());
            return _searchCommand;
        }
    }