如何在Xamarin.Forms的MainPage中创建按钮的动态列表?

时间:2018-09-20 16:21:30

标签: c# xamarin.forms

我正在创建一个扫描条形码票证的应用程序。启动应用程序时,必须在屏幕上显示可用节目的列表。为了获得所有可用的节目,我正在使用一个向我返回List<Event>的网络服务。如何创建按钮列表,每个按钮代表xaml.cs内部的显示/事件?单击该按钮时,将显示一个新页面,用户可以在其中扫描该节目中的票证。我对Xamarin.Forms很陌生,我也不了解如何使用分页/内容视图。我已经搜索了很多东西,但是最接近我需要的是:https://docs.microsoft.com/en-us/xamarin/xamarin-forms/xaml/xaml-basics/get-started-with-xaml?tabs=vswin

不幸的是,它仅显示了如何添加一定数量的控件。而不是动态产生的金额。

非常感谢!

1 个答案:

答案 0 :(得分:0)

在xaml中,您希望按钮出现的地方插入一个堆栈布局。请记住,您还可以同时使用其“方向”和“间距”属性。所以:

<StackLayout x:Name="MyButtons"/>

然后通过代码隐藏生成您的动态按钮列表。将代码放在InitializeComponent();之后的构造函数中或其他地方:

    var myList = new List<*Event or something*>(); //your list here
    MyButtons.Children.Clear(); //just in case so you can call this code several times np..
                foreach (var item in myList)
                {
                    var btn = new Button()
                    {
                        Text = item.*your property*, //Whatever prop you wonna put as title;
                        StyleId = item.*your ID property* //use a property from event as id to be passed to handler
                    };
                    btn.Clicked += OnDynamicBtnClicked;
                    MyButtons.Children.Add(btn);
                }

添加处理程序:

private void OnDynamicBtnClicked(object sender, EventArgs e)
        {
            var myBtn = sender as Button;
            // who called me?
            var myId = myBtn.StyleId; //this was set during dynamic creation

            //do you stuff upon is
            switch (myId)
            {
                    case "1": //or other value you might have set as id
                        //todo
                        break;
                    default:
                        //todo
                        break;
            }

        }