我在后面的代码中动态地将几个文本框添加到我的网格中。我希望能够捕获用户在这些文本框中输入的内容。
我不确定如何执行此操作,因为当我尝试将动态添加的文本框的名称添加到我的代码隐藏中时,它的名称不可用。
我想创建一个查询构建器工具。这是非常粗略的,但基本上我想添加多个组合框、文本框和按钮。
我在后面的代码中动态地将几个文本框添加到我的网格中。我希望能够捕获用户在这些文本框中输入的内容。
我不确定如何执行此操作,因为当我尝试将动态添加的文本框的名称添加到我的代码隐藏中时,它的名称不可用。
我想创建一个查询构建器工具。这是非常粗略的,但基本上我想添加多个组合框、文本框和按钮。
首先,你必须摒弃在代码中操纵 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,
}
结果:
INotifyPropertyChanged
. 这是 WPF 中一切的默认方法。@jeff V,您可以使用分配这些文本框的名称来简单地捕获文本框文本。您正在使用 tb1,tb2 作为文本框名称...因此您可以使用轻松获取值
插入文本框时,请在某个对象中保留对它的引用。字典可能是一个不错的选择。这样,您可以稍后获取该引用,并从该引用中读取它的 Text 属性。