2013-09-27 3 views
1

У меня есть этот андроид вид, где я использую LegacyBar:Как связать команду внутри View в ViewModel в MvvmCross

public class BaseView : MvxActivity 
{ 
    public override void SetContentView(int layoutResId) 
    { 
     base.SetContentView(layoutResId); 
     var bar = FindViewById<LB.LegacyBar>(Resource.Id.actionbar); 
     bar.SetHomeLogo(Resource.Drawable.Icon); 
     var attr = this.GetType() 
      .GetCustomAttributes(typeof(ActivityAttribute), true) 
      .FirstOrDefault() as ActivityAttribute; 
     if (attr != null) 
      bar.Title = attr.Label; 
     bar.SetHomeAction(new ActionLegacyBarAction(ApplicationContext, doHomeAction, Resource.Drawable.Icon)); 
    } 

    public ICommand homeActionClicked { get; set; } 
    private void doHomeAction() 
    { 
     if (homeActionClicked != null && homeActionClicked.CanExecute(null)) 
      homeActionClicked.Execute(null); 
    } 
} 

Что такое правильный способ связать homeActionClicked определенный внутри этого представления к Команда в ViewModel? Или, может быть, я должен создать собственный элемент управления и поместить в него панель, а затем привязать команду управления?

ответ

2

Для этого свойства, вы можете сделать, как говорит @ Крис - использование base.ViewModel и литье, чтобы дать вам доступ к ViewModel, или вы можете использовать FluentBinding, если вы хотите сделать привязку внутри OnCreate - например,

var set = this.CreateBindingSet<BaseView, BaseViewModel>(); 
set.Bind(this).For(v => v.homeActionClicked).To(vm => vm.GoHomeCommand); 
set.Apply(); 
3

Вы можете ссылаться на свой ViewModel как на свой собственный объект, чтобы вы могли получить доступ к его свойствам и установить команду из вашего представления в режим просмотра.

protected MvvMCore.Core.ViewModels.NavigationBarViewModel NavigationBarViewModel { 
      get{ return base.ViewModel as MvvMCore.Core.ViewModels.NavigationBarViewModel; } 
     } 
+0

Что такое 'MvvMCore'? –

+0

Прошу прощения, это фрагмент кода из одного из моих проектов. Это пространство имен моего проекта MvvMCross (ядро), связанного с проектом Android. Если вы разместите этот код где-нибудь в своей деятельности, вы сможете получить доступ к своей модели просмотра в своем представлении. Надеюсь, это поможет :) – Chris

+2

Спасибо. Это более или менее то, что я думал, что буду делать. Я думаю, что с целью моего приложения, я пойду с использованием Fluent. –

Смежные вопросы