从动态添加的文本框中获取.Text属性

时间:2013-05-15 17:18:19

标签: wpf wpf-controls

我正在我的代码中向我的网格动态添加几个文本框。我希望能够捕获用户输入这些文本框的内容。

我不确定如何执行此操作,因为当我尝试在代码隐藏中添加动态添加的文本框时,该名称无效。

我想创建一个querybuilder工具。这是非常粗鲁的,但基本上我想添加多个组合框,文本框和按钮。

What I'm trying to accomplish

3 个答案:

答案 0 :(得分:2)

首先,您必须leave behind the traditional mentality 操纵代码中的UI元素并拥抱MVVM

<Window x:Class="MiscSamples.QueryBuilderSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:MiscSamples"
        Title="QueryBuilderSample" Height="300" Width="300">
    <ItemsControl ItemsSource="{Binding}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition/>
                        <ColumnDefinition/>
                        <ColumnDefinition Width="Auto"/>
                    </Grid.ColumnDefinitions>

                    <ComboBox ItemsSource="{Binding Operators}" 
                              SelectedItem="{Binding Operator}"/>

                    <TextBox Text="{Binding Value}" Grid.Column="1"/>

                    <Button Content="Add" Grid.Column="2"/>
                </Grid>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</Window>

代码背后:

 public partial class QueryBuilderSample : Window
    {
        public List<QueryCriteria> Criterias { get; set; } 

        public QueryBuilderSample()
        {
            InitializeComponent();

            DataContext = Criterias = Enumerable.Range(0, 10).Select(x => new QueryCriteria()).ToList();
        }
    }

视图模型:

public class QueryCriteria
{
    public List<Operators> Operators
    {
        get
        {
            return Enum.GetValues(typeof(Operators))
                       .Cast<Operators>()
                       .ToList();
        }
    }

    public Operators Operator { get; set; }
    public string Value { get; set; }
}

public enum Operators
{
    Equals,
    Contains,
    GreaterThan,
    SmallerThan,
}

结果:

enter image description here

  • 请注意,我没有使用一行代码来创建/操作UI元素。一切都是通过DataBinding完成的。
  • 简单的代码。没有复杂的事件处理东西或类似的东西。
  • 声明代码。 简单,简单的属性和INotifyPropertyChanged 。这是WPF中一切的默认方法。

答案 1 :(得分:0)

插入文本框时,请在某个对象中保留对它的引用。字典可能是一个不错的选择。这样,您可以稍后获得该引用,并且可以从该引用中读取其Text属性。

答案 2 :(得分:0)

@jeff V您可以使用分配这些文本框的名称来捕获文本框文本。 您正在使用tb1,tb2作为文本框名称...因此您可以使用

轻松获取值