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

XAML/C#是否从ListView中的一组TextBox中提取数据?

  •  1
  • tirtha2shredder  · 技术社区  · 10 年前

    我正在创建Windows phone 8.1应用程序

    我在列表视图中生成了一个文本框RepTb列表。但我想不出一种方法来获取这些文本框中的文本。

    <Grid>
        <Grid.Resources>
            <DataTemplate x:Name="items">
                <TextBox Name="RepTb" Header="{Binding}" 
                         Width="100" HorizontalAlignment="Left"
                         LostFocus="RepTb_LostFocus"/>
            </DataTemplate>
        </Grid.Resources>
    
        <ListView x:Uid="RepListView"
                  ItemsSource="{Binding}"
                  ItemTemplate="{StaticResource items}"
                  Name="RepList"/>
    </Grid>
    

    用于创建文本框的代码:

     List<string> setlist = new List<string>();
     int set = 10;
     for (int i = 1; i <= set; i++ )
          setlist.Add("Reps in Set " + i);
     RepList.DataContext = setlist;
    

    有人能告诉我如何遍历RepList并从文本框中获取内容吗?

    1 回复  |  直到 10 年前
        1
  •  2
  •   Lucas Loegel    10 年前

    您可以使用TwoWay数据绑定来获取文本框的值。

    首先,您需要创建一个包含数据的类。

    public class RepItem
    {
        public string Header {get; set;}
        public string Value {get;set;}
    }
    

    然后注入List而不是List

    List<RepItem> setlist = new List<RepItem>();
     int set = 10;
     for (int i = 1; i <= set; i++ )
          setlist.Add(new RepItem() {Header = "Reps in Set " + i});
     RepList.DataContext = setlist;
    

    最后,将TextBox Text属性绑定到RepItem对象的Value属性:

    <DataTemplate x:Name="items">
            <TextBox Name="RepTb" 
                     Header="{Binding Header}" 
                     Text="{Binding Value, Mode=TwoWay}"
                     Width="100" 
                     HorizontalAlignment="Left"
                     LostFocus="RepTb_LostFocus"/>
     </DataTemplate>
    

    您可以使用 Text="{Binding Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 如果您希望每次键入字符时更新Value属性,否则当失去对TextBox的关注时将更新Value属性。

    您将能够遍历列表并获取所有值

    ((List<RepItem>)RepList.DataContext).Select(repItem => repItem.Value);