代码之家  ›  专栏  ›  技术社区  ›  smoore4

访问代码隐藏中的XAML绑定

  •  0
  • smoore4  · 技术社区  · 6 年前

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

    然后是调试结果:

    enter image description here

    1 回复  |  直到 6 年前
        1
  •  2
  •   Jason    6 年前

    而不是 PageA 设置 PageB's BindingContext ,而是通过 ticketOrderTotal 对象作为上的参数 PageB的 构造函数。然后 PageB 可以自己设置 绑定上下文 以及保留对 ticketOrderTotal公司 对象