将viewModel中的更改通知活动



我试图退出Xamarin Android应用程序中的"锁定任务模式"。以下是我正在努力实现的目标:

  1. 用户点击标签(在Xamarin.Forms中查看(->它导致ViewModel的布尔属性更改为true
  2. MainActivity(Xamarin.Android(观察到属性已更改为true->它使应用程序退出"锁定任务模式">

我的viewModel被放在Xamarin.Forms的App.xaml类中,因此它可以在Forms和Android部分中访问。

如何通知"活动"属性已更改,以便退出锁定模式?我知道这是一个非常糟糕的解决方案,我很乐意听到任何建议和提示,使其更加专业。

提前谢谢!

编辑

所以重点是,我得到了具有布尔属性exitLockMode的ViewModel,它指示应用程序是否应该处于锁定模式:

public class AdminViewModel : BaseViewModel
{
//Number of taps to touch at main banner in 'MainPage' to open Admin Window
private int _tapsRequiredToAdmin = 5;
//Number of tolerance in miliseconds between next taps
private int _toleranceInMs = 1000;
private bool _exitLockMode = false;

public int ToleranceInMs { get => _toleranceInMs;  }
public int TapsRequiredToAdmin { get => _tapsRequiredToAdmin; }
public bool ExitLockMode
{
get => _exitLockMode;
set => _exitLockMode=value;
}
}

AdminViewModel是在"App.xaml"类中创建的:

public partial class App : Application
{
private static AdminViewModel _adminViewModel;

public App()
{
InitializeComponent();
MainPage = new NavigationPage(new MainPage());

}
public static AdminViewModel AdminViewModel
{
get
{
if(_adminViewModel == null )
_adminViewModel = new AdminViewModel();
return _adminViewModel;
}
}
protected override void OnStart() { }
protected override void OnSleep() { }
protected override void OnResume() { }


}

在我的主视图(Xamarin.Forms(中,我有一个标签,管理员想点击几次以退出锁定模式:

private DateTime? LastTap = null;
private byte NumberOfTaps = 0;
AdminViewModel adminViewModel = App.AdminViewModel;
**********************************************
//This is method binded to Label in <TapGestureRecognizer Tapped="OnLabelTapped">
private async void OnLabelTapped(object sender, EventArgs e)
{
if (LastTap == null || (DateTime.Now - LastTap.Value).TotalMilliseconds < adminViewModel.ToleranceInMs)
{
if (NumberOfTaps == (adminViewModel.TapsRequiredToAdmin - 1))
{
NumberOfTaps = 0;
LastTap = null;
adminViewModel.ExitLockMode = true;

return;
}
else
{
NumberOfTaps++;
LastTap = DateTime.Now;
}
}
else
{
NumberOfTaps = 1;
LastTap = DateTime.Now;
}
}

现在我想实现的是,当我将"ExitLockMode"bool设置为true时,它会通知我的"MainActivity"(Xamarin.Android(启动"StopLockTask(("方法。我知道在原生Android中,可以通过观察bool属性来处理它,但我不知道如何在这里做到这一点。

我是一个新手,所以可能会很乱,谢谢你的帮助。

正如Jason所说,您可以使用messagecenter。Xamarin.Forms MessagingCenter类实现了发布-订阅模式,允许在不方便通过对象和类型引用链接的组件之间进行基于消息的通信。

这种机制允许发布者和订阅者在没有相互引用的情况下进行通信,有助于减少它们之间的依赖关系。

您可以遵循此文档和其中的示例https://learn.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/messaging-center

最新更新