Xamarin Forms Условные заявления - PullRequest
0 голосов
/ 21 ноября 2018

Привет, ребята: я застрял с моим кодом здесь.В моем приложении есть пункт, где мне нужно уведомить пользователей о регистрации и подписке, чтобы сохранить их настройки.Я пытался добавить отображение предупреждения внутри ViewModel, но это не работает.Пожалуйста, помогите, я застрял.

ApproveViewModel

    namespace MyApp.ViewModels
    {
     public class ApproveViewModel
    {
        private DataService dataService = new DataService();
        public Oppotunity SelectedOppotunity { get; set; }


    public ICommand SaveCommand => new Command(async () =>
        { 

        await dataService.PostSaveOppotunity(SelectedOppotunity, Settings.AccessToken);

        });

    public ApproveViewModel()
    {
        SelectedOppotunity = new Oppotunity();
    }

}
}

ApprovePage.xaml

<ScrollView>
<StackLayout Padding ="15">

    <Label Text ="{Binding SelectedOppotunity.Title}"/>
    <Label Text ="{Binding SelectedOppotunity.Description }"/>
    <Label Text ="{Binding SelectedOppotunity.Organisation}"/>
    <Label Text ="{Binding SelectedOppotunity.Venue }"/>
    <Label Text ="{Binding SelectedOppotunity.Eligibility}"/>
    <Label Text ="{Binding SelectedOppotunity.Benefits}"/>
    <Label Text ="{Binding SelectedOppotunity.Province}"/>
    <Label Text ="{Binding SelectedOppotunity.Country}"/>
    <Label Text ="{Binding SelectedOppotunity.OppotunityLink}"/>
    <Label Text ="{Binding SelectedOppotunity.Category}"/>
    <Label Text  ="{Binding SelectedOppotunity.Deadline}"/>
    <!--
    <Switch IsToggled ="{Binding SelectedOppotunity.IsApproved}"></Switch>
    -->

        <Button Text ="Apply" BackgroundColor ="#A91717" TextColor ="White"
            Command ="{Binding SaveCommand }"/>


</StackLayout>

Код, который я хочу вызвать при сохранении:

 if (!string.IsNullOrEmpty(Settings.AccessToken))
         {
            // Implement the SaveCommand from the ViewModel;
        }
           // Go to Login form to get an access token
        else if (!string.IsNullOrEmpty(Settings.Username) &&
                 !string.IsNullOrEmpty(Settings.Password))
        {
            MainPage = new NavigationPage(new Login());
        }

        else
        {  
            //Register first
            MainPage = new NavigationPage(new NewRegisterPage());
        }

Ответы [ 2 ]

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

Решение:

Для решения этой проблемы можно использовать MessageCenter подписки.

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

Подписаться - прослушивать сообщения с определенной подписью и выполнять некоторые действия, когда ониполучено.Несколько подписчиков могут прослушивать одно и то же сообщение.

Отправить - Опубликуйте сообщение, чтобы слушатели могли действовать.Если подписчики не подписаны, сообщение игнорируется.

Код в модели представления:

if (!string.IsNullOrEmpty(Settings.AccessToken))
    {
       // Implement the SaveCommand from the ViewModel;
    }
       // Go to Login form to get an access token
    else if (!string.IsNullOrEmpty(Settings.Username) &&
             !string.IsNullOrEmpty(Settings.Password))
    {
        MainPage = new NavigationPage(new Login());
    }
    else
    {  
        //Register first

        //if you want to notify users to register here, use MessageCenter.Send
         MessageCenter.Send(this, "displayAlert")

         MainPage = new NavigationPage(new NewRegisterPage());
    }

Код в представлении:

MessagingCenter.Subscribe<ViewModelName>(this, "displayAlert", (sender) => {
            // do something whenever the "displayAlert" message is sent

            DisplayAlert("notification", "you should register first", "ok");
        });

Отправитьсообщение, в котором вы хотите отобразить предупреждение в viewModel.

Для получения дополнительной информации о MessageCenter, вы можете обратиться к https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/messaging-center

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

Если вы не хотите отображать предупреждение из ViewModel, вы можете:

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