Как динамически добавлять кнопки с помощью MessagingCenter в Xamarin.Forms MVVM - PullRequest
0 голосов
/ 30 января 2019

Я хочу добавить кнопки в динамическом представлении, например, в некоторых случаях я добавлю 2 кнопки и в определенных возможностях добавлю 4 кнопки, но я хочу обобщить всю эту логику в представлении, в которое я только передаю параметрынапример, название заголовка, количество кнопок и т. д., чтобы пользователь был развернут следующим образом ...

2 buttons 4 buttons

, чтобы сделать это, откажитесь от некоторых реализаций:

1.- Используйте a, так как это создает мертвую область, если список состоит из нескольких элементов 2.- Используйте элемент управления, так как это несуществует для Android-iOS

При использовании MVVM в качестве архитектурного шаблона мне трудно передать параметры в CodeBehind, для предыдущего использования MessagingCenter, в котором я передаю список строк, через который я, наконец, перехожуЯ добавляю кнопки, но это не работает

у вас есть следующий вид с соответствующим x: Имя ...

View.xaml:

<Label
         Text="{Binding Titulo}"
         HorizontalOptions="CenterAndExpand">
</Label>

<StackLayout 
          x:Name="EntriesStackLayout">

</StackLayout>

isв ViewModel Viгде я передаю список через MessagingCenter

ViewModel.cs:

#region Constructor
public OptionsPopUpViewModel(string title, List<string> opciones)
{         
    Titulo = title;
    opcionesMensaje = opciones;

    MessagingCenter.Send((App)Xamarin.Forms.Application.Current, "Opciones", opcionesMensaje);
}
#endregion

Затем в коде позади представления я получаю в методе OnAppearing () и создаю кнопку вВид

Вид.xaml.cs:

 public OptionsPopUpView()
 {
     InitializeComponent();
 }

  protected override void OnAppearing()
  {
      base.OnAppearing();

      MessagingCenter.Subscribe<App, List<string>>((App)Xamarin.Forms.Application.Current, "Opciones", (s, opcionesMensaje) =>
      {
          foreach (var item in opcionesMensaje)
          {
              Button boton = new Button();

               EntriesStackLayout.Children.Add(boton);
          }

      });
 }

 protected override void OnDisappearing()
 {
      base.OnDisappearing();
      MessagingCenter.Unsubscribe<App, List<string>>(this, "Opciones");
 }

Ожидаемое поведение: Добавление кнопок в зависимости от количества элементов в списке

Полученное поведение: при отслеживании кода,первый не выполняет метод OnAppering (), когда я запускаю его во второй раз, он входит в метод и работает правильно, но не добавляет кнопки

Почему я получаю такое поведение?потому что мой код не может добавить кнопки, если я получаю список в MessagingCenter?

MessagingCenter

Что я делаю не так?любая помощь для меня?

Надеюсь, этот вопрос поможет тем, кто с той же проблемой

С уважением!

...