我有这个Android视图,我正在使用LegacyBar:
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);
}
}
将此View中定义的homeActionClicked
绑定到ViewModel中的命令的正确方法是什么?
或者也许我应该制作一个自定义控件并将其放在其中,然后绑定控件的命令?
答案 0 :(得分:3)
您可以在视图中将ViewModel作为属性引用,以便可以访问它的属性并从视图中设置命令到viewmodel。
protected MvvMCore.Core.ViewModels.NavigationBarViewModel NavigationBarViewModel {
get{ return base.ViewModel as MvvMCore.Core.ViewModels.NavigationBarViewModel; }
}
答案 1 :(得分:2)
对于这个属性,您可以像@Chris建议的那样 - 使用base.ViewModel
并使用强制转换来访问ViewModel,或者如果要在OnCreate
内进行绑定,则可以使用FluentBinding - 例如
var set = this.CreateBindingSet<BaseView, BaseViewModel>();
set.Bind(this).For(v => v.homeActionClicked).To(vm => vm.GoHomeCommand);
set.Apply();