Windows phone 8.1 - 动态创建的textBoxes中的文本

时间:2016-01-08 14:32:19

标签: c# xaml windows-phone-8.1 windows-phone

我正在尝试在Windows Phone 8.1中创建表格方案但我在保存时遇到问题。我在XAML中创建了表:这是代码

 <ItemsControl x:Name="br" ItemsSource="{Binding Data}">
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>

                            <Grid x:Name="Ahoj" Margin="0,0,-20,-18">
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="100"/>
                                    <ColumnDefinition Width="100"/>
                                    <ColumnDefinition Width="100"/>
                                    <ColumnDefinition Width="100"/>
                                    <ColumnDefinition Width="100"/>
                                    <ColumnDefinition Width="100"/>
                                    <ColumnDefinition Width="100"/>
                                    <ColumnDefinition Width="100"/>
                                    <ColumnDefinition Width="100"/>
                                    <ColumnDefinition Width="100"/>
                                </Grid.ColumnDefinitions>


                                <TextBox Grid.Column="0" Text="{Binding name}"></TextBox>
                                <TextBox Grid.Column="1" Text="{Binding s1}"></TextBox>
                                <TextBox Grid.Column="2" Text="{Binding s2}"></TextBox>
                                <TextBox Grid.Column="3" Text="{Binding s3}"></TextBox>

                                <TextBox Grid.Column="4" Text="{Binding s3}"></TextBox>
                                <TextBox Grid.Column="5" Text="{Binding name}"></TextBox>
                                <TextBox Grid.Column="6" Text="{Binding s1}"></TextBox>
                                <TextBox Grid.Column="7" Text="{Binding s2}"></TextBox>
                                <TextBox Grid.Column="8" Text="{Binding s3}"></TextBox>

                                <TextBox Grid.Column="9" Text="{Binding s3}"></TextBox>

                            </Grid>
                        </DataTemplate>

                    </ItemsControl.ItemTemplate>
                </ItemsControl>

但我不知道如何从这个动态创建的textBox中读取值。我需要获得所有文本框的值。我不需要单独使用它们。 感谢

修改

我尝试使用答案中的代码并且效果很好,但只能使用第一个网格。 我也在动态创建网格。此网格具有相同的名称,但与Binding具有不同的值。 答案工作中的代码仅从第一行文本框返回值...

enter image description here

代码 - 我正在将项目添加到列表中,并且在Itemsource为此列表后我将其绑定到文本框

 var str = new StreamReader(contentStream);

            while(str.EndOfStream !=true)
            {

                string line = str.ReadLine();
                if (line == null)
                    break;
               var spl = line.Split(';');
               string prvni = spl[0].ToString();

                if(spl[0]!="")
                {
               if (spl[0].Substring(0,3).Contains("-"))
               {
                   obj.Add(new data(a+pocet.ToString(),spl[0].ToString(), spl[1].ToString(), spl[2].ToString(),"#FF00D1FF"));
               }

               else
                   obj.Add(new data(a+pocet.ToString(),spl[0].ToString(), spl[1].ToString(), spl[2].ToString(), "White"));
            }
                else
                {
                    obj.Add(new data(a + pocet.ToString(), spl[0].ToString(), spl[1].ToString(), spl[2].ToString(), "White"));
                }




               pocet++;
            }



            br.ItemsSource = obj;  // load list to binding

班级数据

public class data
{
public string Index { get; set; }
public string s1 { get; set; }
public string s2 { get; set; }
public string s3 { get; set; }
public string color { get; set; }

public data() { }

public data(string index,string s1, string s2, string s3, string br)
{
    this.Index = index;

    this.s1 = s1;
    this.s2 = s2;
    this.s3 = s3;
    this.color = br;
}
}  

2 个答案:

答案 0 :(得分:1)

不确定这是否是您要问的,但如果您想创建文本框中所有字符串的列表,您可以执行以下操作:

循环遍历&#34; Ahoj&#34;的每个视觉子元素。 grid(使用VisualTreeHelper.GetChild(container,index))并检查它是否是TextBox类型。如果它是请求TextBox的Text属性并将其添加到字符串列表。

有关详细信息,请参阅MSDN VisualTreeHelper

答案 1 :(得分:1)

我还使用过动态内容,我曾经这样做过:(根据您的要求)

// Cycle through every control from Ahoj
foreach (Object controlObject in Ahoj.Children) {
    if (controlObject is TextBox) {
        TextBox
            textBox = controlObject as TextBox;

        // Do your stuff here...
    }
}

由于您说您无法直接访问Grid(如果我理解正确,您是通过运行时代码添加控件),那么您可以执行以下操作:

try {
    Grid
        grid = FindName("Ahoj") as Grid;

    // Cycle through every control from Ahoj
    foreach (Object controlObject in grid.Children) {
        if (controlObject is TextBox) {
            TextBox
                textBox = controlObject as TextBox;

            // Do your stuff here...
        }
    }
} catch (Exception exception) {
    // Unable to catch or cast the object
}

编辑:如果您还需要知道每个TextBox的位置,则可以使用for(;;)代替。

编辑2016年1月15日:以下是根据评论中所讨论的内容更新的代码,并突然意识到您可以从开始就将List绑定到控件:

try {
    List<data>
        dataList = br.ItemsSource;

    /*
        Do your stuff here ...
    */
} catch(Exception exception) {
    // Unable to get the previously binded items
}