簡體   English   中英

如何在MvvmCross中將視圖內的命令綁定到ViewModel

[英]How to bind a command inside a View to a ViewModel in MvvmCross

我有這個android View,我在這里使用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);
    }
}

將此視圖內定義的homeActionClicked綁定到其ViewModel中的命令的正確方法是什么? 或者,也許我應該制作一個自定義控件並將其放置在其中,然后綁定該控件的命令?

您可以在視圖中將ViewModel引用為屬性,以便可以訪問其屬性,並在視圖中設置命令到視圖模型。

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

對於此屬性,您可以按照@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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM