C# 将带参数的函数应用于WP8中动态创建的按钮
在这里,我再次尝试发现Windows Phone 8 C#编码的美丽世界 这一次,我的问题是: 通过正常使用我的应用程序,我得到了一个XML文件。让我们承认,几分钟后,XML文件如下所示:C# 将带参数的函数应用于WP8中动态创建的按钮,c#,xml,for-loop,windows-phone-8,C#,Xml,For Loop,Windows Phone 8,在这里,我再次尝试发现Windows Phone 8 C#编码的美丽世界 这一次,我的问题是: 通过正常使用我的应用程序,我得到了一个XML文件。让我们承认,几分钟后,XML文件如下所示: <itemList> <Item> <Name>Item Name</Name> //Other Item children elements here </Item> <Item>
<itemList>
<Item>
<Name>Item Name</Name>
//Other Item children elements here
</Item>
<Item>
<Name>Item 2 Name</Name>
//Other Item children elements here
</Item>
</itemList>
此字符串数组用于使用for循环动态创建按钮:
for (int i = 0; i < Names.Length; i++)
{
Button dynamicButton = new Button();
dynamicButton.Content = Names[i];
//other stuff on the button
ListOfButtons.Children.Add(dynamicButton); //ListOfButton is a StackPanel.
}
dynamicButton.Click += (s, e) => resume(Names[i], Element2[i], Element3[i]);
但这显然是不起作用的,因为我已经达到了它的最大值,因为我需要增加它。所以,当我点击任何一个按钮时,我得到了一个越界异常。即使没有显示,单击Item1按钮也会显示数组中最后一个元素的信息
所以,我正在寻找一种方法,使每个按钮在点击时都有自己的信息显示。我不知道我是否解释得很好,因为英语不是我的主要语言,如果需要,请询问更多细节
万分感谢 使用MVVM的方法会更优雅,但为了简单起见,我将继续使用您的代码 您需要的是在每个按钮上存储一些附加数据以供以后使用。您可以为此使用
标记
属性。假设您有一个名为Data的类,它将保存您需要的所有附加数据。创建按钮时,分配标记
dynamicButton.Tag = new Data{...} //custom data class containing the needed data from Names[i], Element2[i], etc.
然后您可以像这样使用单击处理程序中的数据
dynamicButton.Click += (s, e) =>
{
var button = s as Button;
var data = button.Tag as Data;
//do whatever you want with the data
}
为什么不尝试使用
字典
,它使用名称[i]
作为键,并将数据显示为值?首先,我想知道“什么,唯一的方法是创建一个新类?真的没有更简单的方法?”然后我尝试了,这是毫无困难的。谢谢!不需要新类,可以使用元组,但可读性较差
dynamicButton.Click += (s, e) =>
{
var button = s as Button;
var data = button.Tag as Data;
//do whatever you want with the data
}