我正在我的代码中向我的网格动态添加几个文本框。我希望能够捕获用户输入这些文本框的内容。
我不确定如何执行此操作,因为当我尝试在代码隐藏中添加动态添加的文本框时,该名称无效。
我想创建一个querybuilder工具。这是非常粗鲁的,但基本上我想添加多个组合框,文本框和按钮。
答案 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,
}
结果:
INotifyPropertyChanged
。这是WPF中一切的默认方法。答案 1 :(得分:0)
插入文本框时,请在某个对象中保留对它的引用。字典可能是一个不错的选择。这样,您可以稍后获得该引用,并且可以从该引用中读取其Text属性。
答案 2 :(得分:0)
@jeff V您可以使用分配这些文本框的名称来捕获文本框文本。 您正在使用tb1,tb2作为文本框名称...因此您可以使用
轻松获取值