C# WPF创建多个控件组

C# WPF创建多个控件组,c#,wpf,binding,controls,C#,Wpf,Binding,Controls,假设我有五个文本框和五个复选框 现在我想创建x组这样的控件,然后将其与一个对象列表绑定,该列表将包含文本框中的文本和选中复选框时的数据 对于这样的事情,常用的方法是什么 我首先编写了一个函数,在现有网格中创建新的RowDefinition循环x次,然后在该行中创建另一个网格,在该网格中创建五行两列,并添加所有控件,设置它们的行、列、添加绑定等,但我认为这不是正确的方法,写这些太麻烦了。必须有更好的方法。您可以使用ItemsControl并为项目定义数据模板来实现此功能。请参阅以下代码。我举了一个

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

现在我想创建x组这样的控件,然后将其与一个对象列表绑定,该列表将包含文本框中的文本和选中复选框时的数据

对于这样的事情,常用的方法是什么


我首先编写了一个函数,在现有网格中创建新的RowDefinition循环x次,然后在该行中创建另一个网格,在该网格中创建五行两列,并添加所有控件,设置它们的行、列、添加绑定等,但我认为这不是正确的方法,写这些太麻烦了。必须有更好的方法。

您可以使用ItemsControl并为项目定义数据模板来实现此功能。请参阅以下代码。我举了一个3个文本框和复选框的例子

<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; }
}

公共部分类Window2:Window
{
ObservableCollection lst=新的ObservableCollection();
公共窗口2()
{
初始化组件();
itms.ItemsSource=lst;
}
int i=0;
私有无效按钮\u单击(对象发送者,路由目标e)
{
i++;
添加(新MyClass(){Text1=i.ToString(),Text2=i.ToString()+1,Text3=i.ToString()+2,Check1=true,Check2=true,Check3=false});
}
}
类MyClass
{
公共字符串Text1{get;set;}
公共字符串Text2{get;set;}
公共字符串Text3{get;set;}
公共bool Check1{get;set;}
公共bool Check2{get;set;}
公共bool Check3{get;set;}
}

尝试使用DataTemplate和ItemsControl。