У меня есть ситуация, когда я пытаюсь запретить пользователю спамить кнопку, и для этого у меня есть команда, принимающая две функции в качестве параметров. Первая - это команда, которая определяет, какая кнопка была нажата, а затем выполняет соответствующую навигационную операцию. В настоящее время, когда вы нажимаете кнопку, существует небольшая задержка, я предполагаю, что пока загружаются данные, а затем кнопки отключаются за миллисекунду до загрузки и представления новой страницы. Я хотел бы, чтобы они отключались сразу после нажатия кнопки, чтобы они не могли спамить, и загружали несколько страниц одного типа.
При нажатии этой конкретной кнопки, которую я пытаюсь разрешить, PageM ViewModel извлекает таблицу SQL из веб-службы. Вызов этого находится в конструкторе Page1ViewModel.
NavigateAsyncCommand = new RelayCommandAsync<object>(NavigateAsync, CanClickButton);
public async Task NavigateAsync(object parameter)
{
IsBusy = true;
Xamarin.Forms.Button b = parameter as Xamarin.Forms.Button;
string page = b.Text;
switch (page)
{
case "Page1":
await App.MainNavigation.PushAsync(new Views.Page1(), true);
IsBusy = false;
return;
//More cases here
}
}
Вторая функция просто проверяет состояние IsBusy и возвращает обратное.
public bool CanClickButton(object parameter)
{
return !IsBusy;
}
В моем XAML мои кнопки реализованы следующим образом
<Button x:Name="StartButton"
Command="{Binding NavigateAsyncCommand}"
CommandParameter="{Binding Source={x:Reference StartButton}}"
Text="{Binding StartText}"
Grid.Row="1"/>