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

Итак, я новичок в 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 Ответ

0 голосов
/ 28 ноября 2018

Для этого можно использовать MessagingCenter .

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

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

В вашем OnSleep:

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

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

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

HIH

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...