And*_* N. 2 android mvvmcross xamarin
我想为活动设置自定义标题栏,标题栏有一个绑定到活动视图模型中的命令的按钮.
不知怎的,我并不感到惊讶它没有用.
是否有可能使其有效?
代码:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
MainViewModel.cs
public class MainViewModel : MvxViewModel
{
public IMvxCommand SearchCommand { get; private set; }
....
}
Run Code Online (Sandbox Code Playgroud)
我不熟悉这个功能......但这里有一些建议:
如果它只是窗口标题,那么你不能只绑定以下活动Title
:
this.CreateBinding().For("Title").To<FirstViewModel>(vm => vm.Title).Apply();
Run Code Online (Sandbox Code Playgroud)
有没有办法将窗口的自定义标题设置为视图而不是ID?如果有,那么你可以this.BindingInflate(id)
在将xml传递给窗口之前使用它来膨胀(不知道是否可能 - 但是Android - 在运行时更改自定义标题视图对内部黑客有一些有趣的建议......)
如果上面的黑客行为不起作用,那么你将不得不求助于如何在android中动态设置自定义标题栏TextView Value的技巧? - 使用它你可以做类似的事情:
// 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();
Run Code Online (Sandbox Code Playgroud)
我认为这样可行......虽然不确定它在多个活动的整个生命周期中是如何工作的 - 猜测可能会有一些游戏/实验要做.
(此问题和答案 - Android - 在运行时更改自定义标题视图 - 还建议其他方法来获取自定义标题中的视图/小部件)
归档时间: |
|
查看次数: |
2440 次 |
最近记录: |