我想为活动设置自定义标题栏,标题栏有一个绑定到活动视图模型中命令的按钮。
不知怎的,我并不感到惊讶它没有用。
是否可以让它发挥作用?
代码:
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; }
....
}
答案 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 - 还建议了其他方法来获取自定义标题中的视图/小部件)