c# - 在代码隐藏中访问 XAML 绑定
问题描述
我在 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}”值。我也找到了一种方法来做到这一点,但它似乎并不是最优的。这是我所拥有的kludge:
<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
set PageB's
BindingContext
,而是将ticketOrderTotal
对象作为参数传递给PageB's
构造函数。然后PageB
可以设置它自己BindingContext
的以及保持对ticketOrderTotal
对象的本地引用。
推荐阅读
- c# - 即使在使用 import 之后,要插入的节点也来自不同的文档上下文
- react-native - 调度了不受支持的顶级事件类型“onGestureHandlerStateChange”
- python - 基于其他两个具有重复值的数组为数组赋值
- flutter - 如何以干净的方式管理颤振状态?
- php - 是否可以在抑制软件包卸载(Drupal 8)的同时运行 composer install ?
- ios - 无法在 Xcode 11.x(.xib 文件)中的新自定义视图上添加约束
- tensorflow - 为什么我的 keras 模型没有得到正确的结果
- listview - Flutter:如何将 StreamBuilder 与 ListView.separated 一起使用
- java - 用相机拍照并保存在 FileProvider 中
- c# - Asp-MVC 中用于在 ViewModel 中填充查找值的最佳实践