在代码隐藏中访问XAML绑定

时间:2018-05-01 22:12:56

标签: c# xaml xamarin.forms

我在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;
    }

然后调试结果:

enter image description here

1 个答案:

答案 0 :(得分:2)

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