我在Xamarin工作,但我相信这适用于任何使用XAML的UWP应用程序。
首先,我有两个内容页。在第一个页面上,我想将一些数据传递到第二个页面,因此我将此作为导航的一部分:
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);
}
上述方法在XAML中运行良好。例如,在第二个页面(PaymentPage)上,我可以像这样引用BindingContext,而Text属性是正确的:
<Label x:Name="lblOrderAmount" Text="{Binding OrderTotal}" />
我想做的是访问第二页的C#代码隐藏中的“{Binding OrderTotal}”值。我也找到了这样做的方法,但它似乎并不理想。这是我手头上的难题:
<Label x:Name="lblOrderAmount" Text="{Binding OrderTotal}" BindingContextChanged="GetChargeAmount" />
这是标签背后的代码:
public static string m_charge_amount = "";
...
private void GetChargeAmount(object sender, EventArgs e)
{
var lbl = ((Label)sender);
m_charge_amount = lbl.Text;
}
所以我的问题是:有没有更好的方法?由于XAML似乎植根于WPF、Silverlight、Xamarin、Windows 8以及现在的Windows 10(UWP),因此研究起来尤其困难。到处都是。我一直在与框架作斗争,去做我认为应该很容易做的事情。。。。像这样。请帮忙,但一定要做
be nice
。
非常感谢。
编辑:
根据@Jason的评论,您可以将一个对象传递给页面构造函数,这样就可以了。这就是重新工作的函数现在的样子:
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(ticketOrderTotal);
paymentPage.BindingContext = ticketOrderTotal;
await Navigation.PushAsync(paymentPage);
}
然后是调试结果: