[英]Access XAML binding in code-behind
我在Xamarin中工作,但我相信这适用于使用XAML的任何UWP应用程序。
首先,我有两个ContentPages。 在第一页上,我想将一些数据传递到第二页,因此我将其作为导航的一部分:
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)中,因此特别难以研究。 到处都是。 我一直在与框架竞争,以完成我认为应该很容易做的事情。 请帮忙,但要很好 。
谢谢。
编辑:
根据@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);
}
然后是调试的结果:
而不是让PageA
设置PageB's
BindingContext
,而是将ticketOrderTotal
对象作为参数传递给PageB's
构造函数。 然后PageB
可以设置它自己的BindingContext
并保留对ticketOrderTotal
对象的本地引用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.