我在Xamarin工作,但我相信这适用于任何使用XAML的UWP应用程序。
首先我有两个ContentPages。在第一页上,我想将一些数据传递给第二页,因此我将其作为导航的一部分:
using B = std::remove_reference_t<A> const&;
以上在XAML中工作正常。在第二页(PaymentPage)上,我可以像这样引用BindingContext,并且Text属性是正确的:
async void BuyTickets(object sender, EventArgs e)
{
var ticketOrderTotal = new TicketOrder
{
OrderTotal = lblOrderAmount.Text,
OrderTotalList = ticketsPrices.Where(o => o.TicketQuantity > 0).ToList<Ticket>()
};
var paymentPage = new PaymentPage();
paymentPage.BindingContext = ticketOrderTotal;
await Navigation.PushAsync(paymentPage);
}
我想要做的是访问&#34; {Binding OrderTotal}&#34;第二页的C#代码隐藏中的值。我找到了一种方法来做到这一点,但它似乎并不是最佳的。这是我所拥有的kludge:
<Label x:Name="lblOrderAmount" Text="{Binding OrderTotal}" />
这是标签的代码隐藏:
<Label x:Name="lblOrderAmount" Text="{Binding OrderTotal}" BindingContextChanged="GetChargeAmount" />
所以我的问题是:有更好的方法吗?由于XAML似乎植根于WPF,Silverlight,Xamarin,Windows 8以及现在的Windows 10(UWP),因此研究起来特别困难。到处都是。我一直在与框架斗争,做一些我认为应该很容易做的事情....就像这样。请帮忙,但be nice。
谢谢。
修改
Per @Jason的评论,您可以将一个对象传递给页面构造函数,这将起作用。这就是现在重新加工的功能:
public static string m_charge_amount = "";
...
private void GetChargeAmount(object sender, EventArgs e)
{
var lbl = ((Label)sender);
m_charge_amount = lbl.Text;
}
然后调试结果:
答案 0 :(得分:2)
而不是PageA
设置PageB's
BindingContext
,而是将ticketOrderTotal
对象作为参数传递给PageB's
构造函数。然后,PageB
可以设置自己的BindingContext
,并保留对ticketOrderTotal
对象的本地引用。