2013-06-06 2 views
2

Я хочу установить настраиваемую строку заголовка для действия, в строке заголовка есть кнопка, привязанная к команде в модели вида деятельности.Перемещение 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; } 
      .... 
    } 

ответ

6

Я не знаком с эта функция ... но вот несколько предложений:


Если это только заголовок окна, то вы можете не только связать деятельность Title как:

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

Есть ли способ, чтобы установить пользовательский заголовок окна как вид, а не как идентификатор? Если есть, то вы можете использовать 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 - также предлагают другие способы разжиться мнения/виджетов в пользовательских заголовках)

+0

Спасибо. Я не знаю, как установить его в виде представления. Тем временем я обнаружил, что вы уже показали, создавая привязку по коду. Я вижу так много способов создания привязок CreateBindings, CreateBinding, CreateBindingSet. –

+0

Вместо того, чтобы создавать привязки для каждого отдельного элемента управления, возможно ли связать экземпляр LinearLayout с моделью просмотра и привязать привязки к дочерним элементам управления? В макете заголовка я мог бы дать корневому LinearLayout id, а затем вызвать FindViewById в действии и попытаться привязать к нему модель представления. Связи, объявленные в XML на каждом элементе управления, я предполагаю, что модель представления будет установлена ​​в их родительский элемент управления –

+0

да - вы можете сделать это, если хотите. но только xml, накачиваемый инфлятором mvx, понимает привязку – Stuart