如何使用Xamarin.Forms MVVM中的MessagingCenter动态添加按钮

时间:2019-01-30 12:56:42

标签: c# xamarin mvvm xamarin.forms messaging

我想在动态视图中添加按钮,例如,在某些情况下,我将添加2个按钮,在某些情况下,我将添加4个按钮,但是我想在只传递参数的视图中归纳所有这些逻辑例如视图标题,按钮数等...,以便可以通过以下方式部署用户...

2 buttons 4 buttons

为此,请放弃某些实现:

1.-使用-,因为如果列表中包含的元素很少,则会生成一个死区 2.-使用控件,因为Android-iOS不存在该控件

当使用MVVM作为体系结构模式时,我很难将参数传递给CodeBehind,对于前一个,使用MessagingCenter时,我在其中传递了一个字符串列表,该字符串列表最终经过并添加了按钮,但这是不起作用

您具有以下视图以及相应的x:名称...

View.xaml:

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

<StackLayout 
          x:Name="EntriesStackLayout">

</StackLayout>

位于视图的ViewModel中,我通过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()方法接收的View的代码中,然后在View中创建按钮

View.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

我在做什么错? 对我有帮助吗?

我希望这个问题对遇到同样问题的人有所帮助

致谢!

0 个答案:

没有答案