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();
});
Е.И.В.