xamarin - 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;
}
如果您需要代码中的其他内容,我将把它放在上面。
解决方案
protected override bool OnBackButtonPressed()
{
var vm = (YourViewModel)BindingContext;
vm.ProfileDetailsCommandExecute();
vm.CalendarCommandExecute();
return base.OnBackButtonPressed();
}
我不知道你到底想做什么逻辑,但是这段代码可以让你在不破坏 MVVM 的情况下访问你的 ViewModel。
推荐阅读
- azure-storage - 在 Azure Data Lake Store (Gen2) 中自动创建文件夹
- angular8 - Angular 预填充表单数据在提交时变为空
- python - 如何编写迭代整个数据集的批处理生成器
- css - 使用不同的样式表会提高网站的性能吗?
- docker - 如何为所有 pod 创建和挂载公共数据
- docker - 如何在 Pod 间广播 gRPC 流
- node.js - 如何在网站 json api 中获取第一个 json 文件?
- javascript - 发出请求时 GCF 超时
- pyqt5 - 如何在关闭所述弹出窗口的弹出窗口内制作一个按钮?
- android - 尝试单击单选按钮时如何解决 Robo 测试失败?