WPF创建多组控件

时间:2015-05-08 17:57:15

标签: c# wpf binding controls

假设我旁边有五个文本框和五个复选框。

现在我想要创建x组这样的控件,然后将它与包含文本框中文本的对象列表绑定,如果选中复选框则绑定数据。

这类事情的常用方法是什么?

我开始编写一个函数,它将循环x次在现有Grid中创建新的RowDefinition,然后在该Row内,创建另一个Grid,在Grid内部创建五行和两列,并添加所有这些控件,设置它们的行,列,添加绑定等但我认为这不是正确的方法来做到这一点,这太麻烦写所有这些。必须有更好的方法。

1 个答案:

答案 0 :(得分:0)

您可以使用ItemsControl和为项目定义Datatemplate来实现此功能。请参阅以下代码。我举了3个TextBoxes和Checkboxes的例子。

<StackPanel>
    <ItemsControl x:Name="itms">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition/>
                        <RowDefinition/>
                        <RowDefinition/>
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition/>
                        <ColumnDefinition/>
                    </Grid.ColumnDefinitions>
                    <TextBox Width="50" Text="{Binding Text1}" Grid.Row="0" Grid.Column="0"/>
                    <CheckBox IsChecked="{Binding Check1}" Content="Check1" Grid.Row="0" Grid.Column="1"/>
                    <TextBox Width="50" Text="{Binding Text2}" Grid.Row="1" Grid.Column="0"/>
                    <CheckBox IsChecked="{Binding Check2}" Content="Check2" Grid.Row="1" Grid.Column="1"/>
                    <TextBox Width="50" Text="{Binding Text3}" Grid.Row="2" Grid.Column="0"/>
                    <CheckBox IsChecked="{Binding Check3}" Content="Check3" Grid.Row="2" Grid.Column="1"/>
                </Grid>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
    <Button Click="Button_Click" Content="Add Items"></Button>
</StackPanel>

public partial class Window2 : Window
{
    ObservableCollection<MyClass> lst = new ObservableCollection<MyClass>();
    public Window2()
    {
        InitializeComponent();
        itms.ItemsSource = lst;

    }
    int i = 0;
    private void Button_Click(object sender, RoutedEventArgs e)
    {
        i++;
        lst.Add(new MyClass() { Text1 = i.ToString(), Text2 =i.ToString()+1,Text3=i.ToString()+2,Check1=true,Check2=true,Check3=false});
    }
}

class MyClass
{
    public string Text1 { get; set; }
    public string Text2 { get; set; }
    public string Text3 { get; set; }
    public bool Check1 { get; set; }
    public bool Check2 { get; set; }
    public bool Check3 { get; set; }
}