2013-09-27 27 views
1

我有這樣的Android設備上查看,這裏我使用LegacyBar:如何將一個命令的一個視圖中綁定到一個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和鑄造給你訪問到視圖模型,或者如果你想要做的約束力裏面OnCreate可以使用FluentBinding - 例如

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方法。 –

相關問題