如何在页面xamarin.forms之间传递列表?

时间:2017-08-03 21:37:25

标签: c# binding xamarin.forms

我有一个应该传递给另一个视图的对象列表但是我不知道我怎么能在Xamarin.forms中做到这一点,我想我应该使用setBinding,但它是我在这种情况下唯一说的。 谢谢。

List<Localizacao> localizacaoList = new List<Localizacao>(); ;
        if (localizacao != null && lojaPerto != null)
        {
            localizacaoList = new List<Localizacao>();
            Localizacao loc = new Localizacao();
            loc.latitude = Double.Parse(lojaPerto.latitude);
            loc.longitude = Double.Parse(lojaPerto.longitude);
            localizacaoList.Add(loc);
            localizacaoList.Add(localizacao);
        }

        var secondPage = new Views.ComoChegarView ();
        secondPage.BindingContext = localizacaoList;
        await Navigation.PushAsync(secondPage);

事实上,我已发送,但我无法在其他视图中再次获取

2 个答案:

答案 0 :(得分:0)

如果您没有使用任何其他框架,也许您可​​以尝试使用构造函数参数。

public partial class ComoChegarView
{
   ...
   private List<Localizacao> Locals{get;set;}       

   public ComoChegarView(List<Localizacao> locals)
   {
      InitializeComponent(); //standard code that mix xaml and code behind
      this.Locals = locals; //store the data in property
      this.BindingContext = this; //Set the binding context
   }

}

因此,您可以在构造页面时传递该值。

List<Localizacao> localizacaoList = new List<Localizacao>(); ;
if (localizacao != null && lojaPerto != null)
{
    localizacaoList = new List<Localizacao>();
    Localizacao loc = new Localizacao();
    loc.latitude = Double.Parse(lojaPerto.latitude);
    loc.longitude = Double.Parse(lojaPerto.longitude);
    localizacaoList.Add(loc);
    localizacaoList.Add(localizacao);
}

var secondPage = new Views.ComoChegarView (localizacaoList);
await Navigation.PushAsync(secondPage);
  

请记住,在XAML中更新您的绑定以反映属性访问权限(例如)

<ListView ItemsSource="{Binding Locals}">...</ListView>

答案 1 :(得分:0)

所有严肃的MVVM库都完美支持您想要实现的目标。 1)视图不会将任何内容传递给另一个视图,它是ViewModels的工作 2)在MVVM上下文中,您可以使用许多技术将数据从一个ViewModel发送到另一个ViewModel,主要是:MVVM信使(其中包括Xamarin.Forms)或ViewModel构造函数中的依赖注入(使用大多数MVVM库提供的IoC容器,使用Unity,DryIoc,...)。 如果你不掌握MVVM模式肯定很难做,但你应该花一点时间研究这种模式,一些库作为Prism。您将很快看到这种方法的好处,并且非常乐意更有效地编写代码(并在一分钟内快速找到解决问题的方法,例如您在此处讨论的问题)。