2

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

不知何故,我并不惊讶它没有工作。

有可能让它工作吗?

编码:

主视图.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>

主视图模型.cs

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

1 回答 1

6

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


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

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

有没有办法将窗口的自定义标题设置为视图而不是 id?如果有,那么您可以this.BindingInflate(id)在将 xml 传递到窗口之前使用它来膨胀 xml(不知道这是否可能 - 但Android - 在运行时更改自定义标题视图对内部黑客有一些有趣的建议......)


如果上述黑客攻击不起作用,那么您将不得不求助于如何在 android 中动态设置自定义标题栏 TextView 值之类的技术?- 使用它,您可以执行以下操作:

   // 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 - 在运行时更改自定义标题视图- 还建议了其他方法来获取自定义标题中的视图/小部件)

于 2013-06-06T17:32:39.117 回答