首页 > 解决方案 > Xamarin Form,我在代码中使用 OnBackButtonPressed,但我需要在 MVVM 中执行此操作

问题描述

我需要覆盖导航栏,但我想根据 MVVM 来做。现在我有如下的东西。如果可能的话,我想将 OnBackButtonPressed 逻辑转移到 ViewModel

代码背后

  protected override bool OnBackButtonPressed()
    {
        if(Followers.IsVisible)
        {
            Followers.IsVisible = false;

            FollowersBackground.BackgroundColor = Consts.UNACTIVE_COLOR; 

            ProfileBackground.BackgroundColor = Consts.ACTIVE_COLOR;

            return Profile.IsVisible = true;

        }
        else if(Cars.IsVisible)
        {
            Cars.IsVisible = false;

            CarsBackground.BackgroundColor = Consts.UNACTIVE_COLOR;

            ProfileBackground.BackgroundColor = Consts.ACTIVE_COLOR;

            return Profile.IsVisible = true;
        }
        else if(Calendar.IsVisible)
        {
            Calendar.IsVisible = false;

            CarsBackground.BackgroundColor = Consts.UNACTIVE_COLOR;

            ProfileBackground.BackgroundColor = Consts.ACTIVE_COLOR;

            return Profile.IsVisible = true;
        }

        return base.OnBackButtonPressed();
    }

ViewModel -> 这是在按下适当的选项卡时隐藏或显示视图上的选项卡的代码的一部分

 private void ProfileDetailsCommandExecute()
    {
        ProfileDetailsItemsEnabled = true;
        FollowersItemsEnabled = false;
        CalendarItemsEnabled = false;
        CarsItemsEnabled = false;
        BackgroundProfileDetails = Consts.ACTIVE_COLOR;
        BackgroundFollowers = Consts.UNACTIVE_COLOR;
        BackgroundCars = Consts.UNACTIVE_COLOR;
        BackgroundCalendar = Consts.UNACTIVE_COLOR;
    }

    private void CalendarCommandExecute()
    {
        ProfileDetailsItemsEnabled = false;
        FollowersItemsEnabled = false;
        CarsItemsEnabled = false;
        CalendarItemsEnabled = true;
        BackgroundProfileDetails = Consts.UNACTIVE_COLOR;
        BackgroundFollowers = Consts.UNACTIVE_COLOR;
        BackgroundCars = Consts.UNACTIVE_COLOR;
        BackgroundCalendar = Consts.ACTIVE_COLOR;
    }

如果您需要代码中的其他内容,我将把它放在上面。

标签: xamarinxamarin.forms

解决方案


protected override bool OnBackButtonPressed()
{
 var vm = (YourViewModel)BindingContext;
 vm.ProfileDetailsCommandExecute();
 vm.CalendarCommandExecute();
 return base.OnBackButtonPressed();
}

我不知道你到底想做什么逻辑,但是这段代码可以让你在不破坏 MVVM 的情况下访问你的 ViewModel。


推荐阅读