Xamarin.Forms, как я могу получить доступ к публичной функции из другого файла CS?

Так что я новичок в XF и мне интересно AppState/Activity Жизненный цикл на Android. Код прямо под этим находится в файле с именем test.xaml.cs,

Как работает звук, вы можете сказать что-то вроде startSound.Play() или же startSound.Stop() запустить или остановить звук в приложении. Я заметил ошибку, которая не останавливает звук, когда остальная часть приложения сбрасывается с помощью кнопки "назад" (даже если она хранится в памяти?)

public Test()
    {
        startSound = CrossSimpleAudioPlayer.CreateSimpleAudioPlayer();
        startSound.Load(Path.Combine($"Audio", "startBeep.wav"));

        stopSound = CrossSimpleAudioPlayer.CreateSimpleAudioPlayer();
        stopSound.Load(Path.Combine($"Audio", "stopBeep.wav"));

        winSound = CrossSimpleAudioPlayer.CreateSimpleAudioPlayer();
        winSound.Load(Path.Combine($"Audio", "winBeep.wav"));

        endSound = CrossSimpleAudioPlayer.CreateSimpleAudioPlayer();
        endSound.Load(Path.Combine($"Audio", "endBeep.wav"));

        addSound = CrossSimpleAudioPlayer.CreateSimpleAudioPlayer();
        addSound.Load(Path.Combine($"Audio", "addBeep.wav"));
    }

То, что я хотел бы сделать, это в app.xaml.cs файл для входа в защищенный override void OnSleep() и писать startSound.stop(); так что звук останавливается всякий раз, когда приложение спит. Однако я не знаю, как получить доступ к публичной функции Test в test.xaml.cs,

Это строка кода для app.xaml.cs

protected override void OnSleep()
    {
        Debug.WriteLine("OnSleep");
        // Handle when your app sleeps
    }

Я использовал отладку, чтобы убедиться, что состояние приложения меняется, поэтому я знаю OnSleep() работает правильно.

1 ответ

Вы можете использовать MessagingCenter для этого.

Xamarin.Forms MessagingCenter позволяет моделям представления и другим компонентам взаимодействовать без необходимости знать что-либо друг о друге, кроме простого контракта Message.

Просто отправьте сообщение в OnSleep вашей App и подписаться на сообщение на вашем Test:

В вашем состоянии сна:

MessagingCenter.Send<App>(this, "OnSleep");

В вашем тесте:

MessagingCenter.Subscribe<App>(this, "OnSleep", (sender) => {
    startSound.stop(); 
});

Е.И.В.

Другие вопросы по тегам