微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否可以在 Xamarin.Forms 上的按钮上保存对象?

如何解决是否可以在 Xamarin.Forms 上的按钮上保存对象?

我想知道是否可以在 Xamarin.Forms、C# 上将对象保存到按钮中。这是我的代码

public partial class MenuPage : ContentPage{
    public MenuPage(List<Product> products) {
        InitializeComponent();

        grid.RowDeFinitions.Add(new RowDeFinition());
        grid.RowDeFinitions.Add(new RowDeFinition());
        grid.RowDeFinitions.Add(new RowDeFinition());
        grid.ColumnDeFinitions.Add(new ColumnDeFinition());
        grid.ColumnDeFinitions.Add(new ColumnDeFinition());

        int product_cont = 0;

        for (int rowIndex = 0; rowIndex < 3; rowIndex++) {
            for (int columnIndex = 0; columnIndex < 2; columnIndex++) {
               Button b = new Button();
               b.Text = products[products_cont].name;
               b.OnButtonClicked += async (sender,e) => {
                   //go to products childs
                   await Navigation.PushAsync(new MenuPage(products[products_cont].childs));
               };
               i++; //next product
               grid.Children.Add(b,columnIndex,rowIndex);
            }
        }
    }
}

按钮显示正确,但是当我按下它们时,products[products_cont].childs 不存在。我想如果我能做这样的事情它会工作正常:

...
Button b = new Button();
b.Text = products[products_cont].name;
b.SAVE_OBJECT(products[products_cont])
b.OnButtonClicked += async (sender,e) => {
   //go to products childs
   await Navigation.PushAsync(new MenuPage(b.GET_OBJECT.childs));
};
...

解决方法

您可以使用 BindingContext

Button b = new Button();
b.Text = products[products_cont].name;
b.BindingContext = products[products_cont];
b.OnButtonClicked += NavigateToProduct;

protected void NavigateToProduct(object sender,EventArgs a)
{                   
    var btn = (Button)sender);
    var product = (Product)sender.BindingContext;
    await Navigation.PushAsync(new MenuPage(product.childs));
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。