如何在页面之间传递列表 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);

事实上,我发送了,但我无法在另一个视图中再次获得它

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

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>

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

最新更新