【问题标题】:Access XAML binding in code-behind在代码隐藏中访问 XAML 绑定
【发布时间】:2018-05-01 22:12:56
【问题描述】:

我在 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)。到处都是。我一直在与框架进行斗争,以做我认为应该很容易做到的事情......就像这样。请帮忙做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);
    }

然后是调试结果:

【问题讨论】:

  • 不是让 PageA 设置 PageB 的 BindingContext,而是将 ticketOrderTotal 对象作为参数传递给 PageB 的构造函数。然后 PageB 可以设置它自己的 BindingContext 以及保持对 ticketOrderTotal 对象的本地引用。
  • 谢谢@Jason。我会试试看的。
  • 我不敢相信我花了几个小时寻找这个简单的解决方案。您可以发布为答案,我将其标记为正确。发送。

标签: c# xaml xamarin.forms


【解决方案1】:

而不是让PageA 设置PageB's BindingContext,而是将ticketOrderTotal 对象作为参数传递给PageB's 构造函数。然后PageB 可以设置它自己的BindingContext 并保持对ticketOrderTotal 对象的本地引用。

【讨论】:

    猜你喜欢
    • 2012-07-13
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 2019-06-07
    • 2015-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多