自定义标题栏中的MvvmCross绑定

时间:2013-06-06 16:35:45

标签: android xamarin mvvmcross

我想为活动设置自定义标题栏,标题栏有一个绑定到活动视图模型中命令的按钮。

不知怎的,我并不感到惊讶它没有用。

是否可以让它发挥作用?

代码:

MainView.cs:

[Activity]
public class MainView : MvxActivity
{
    protected override void OnCreate (Bundle savedInstanceState)
    {
       this.RequestWindowFeature(WindowFeatures.CustomTitle);
       base.OnCreate (savedInstanceState);
       this.Window.SetFeatureInt(WindowFeatures.CustomTitle, Resource.Layout.MainWindowTitle);
       SetContentView(Resource.Layout.MainView);
    }
}

MainWindowTitle.axml:

<?xml version="1.0" encoding="utf-8"?>
<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">
        <ImageButton
        android:id="@+id/search"
        android:src="@drawable/magnify"
        local:MvxBind="Click SearchCommand" />
    </LinearLayout>

MainViewModel.cs

 public class MainViewModel : MvxViewModel
    {
          public IMvxCommand SearchCommand { get; private set; }
          ....
    }

1 个答案:

答案 0 :(得分:6)

我不熟悉这个功能......但这里有一些建议:


如果它只是窗口标题,那么你不能只绑定活动Title,如:

   this.CreateBinding().For("Title").To<FirstViewModel>(vm => vm.Title).Apply();

有没有办法将窗口的自定义标题设置为视图而不是id?如果有,那么你可以使用this.BindingInflate(id)在将xml传递给窗口之前对其进行充气(不知道是否可能 - 但Android - change custom title view at run time对内部黑客有一些有趣的建议......)


如果上述黑客行为不起作用,那么您将不得不求助于how to set custom title bar TextView Value dynamically in android?这样的技术 - 使用它可以做类似的事情:

   // set up your custom window here using non-binding axml with an @+id/myTitle
   Window.SetFeatureInt(WindowFeatures.CustomTitle, Resource.Layout.MainWindowTitle);

   var myTitleText = FindViewById<TextView>(Resource.Id.myTitle);
   this.CreateBinding(t).To<FirstViewModel>(vm => vm.Title).Apply();

我认为这样可行......虽然不确定它在多个活动的整个生命周期中是如何工作的 - 猜猜可能会有一些游戏/实验要做。

(这个问题和答案 - Android - change custom title view at run time - 还建议了其他方法来获取自定义标题中的视图/小部件)