首页 > 解决方案 > 如何在我的应用程序中与 ViewModel 进行通信?

问题描述

如何在我的应用程序中与我的 ViewModel 进行通信?

我有我的应用程序的这段代码、睡眠和恢复

protected override void OnSleep()
{
    MessagingCenter.Send<App, string>(this, "gotosleep", "savedata");
}

在我的 ViewModel 中,我订阅了该消息,但它不起作用。我的消息永远不会显示。

public MyViewModel()
{
    MessagingCenter.Subscribe<App, string>(this, "gotosleep", async (obj, item) =>
    {
        Console.WriteLine("HERE"); 
    });
}

标签: xamarin.forms

解决方案


您应该MyViewModelContentPageSubscribe中使用,然后MessagingCenter将起作用。

public MainPage()
{
    InitializeComponent();

    // Use model in Content Page 
    MyViewModel viewModel = new MyViewModel();
}

但是,我发现这不适用于 iOS 设备,但适用于 Android。

这是解决此问题的解决方法,您可以在初始化时将其ContentPage作为ViewModel的属性传递。

public MyViewModel(MainPage mainPage)
{
    MessagingCenter.Subscribe<App, string>(mainPage, "gotosleep", async (obj, item) =>
    {
        Console.WriteLine("HERE"); 
        await mainPage.DisplayAlert("Message received", "arg=" + item, "OK");
    });
}

ContentPage中,修改如下:

public MainPage()
{
    InitializeComponent();

    // Use model in Content Page 
    MyViewModel viewModel = new MyViewModel(this);
}

iOS效果:

在此处输入图像描述

安卓效果:

在此处输入图像描述


推荐阅读