2015-05-08 2 views
0

Предположим, у меня есть пять текстовых полей и пять флажков рядом с ними.WPF, создающий несколько групп элементов управления

Теперь я хочу создать x групп таких элементов управления, а затем привязать их к списку объектов, которые будут содержать текст из текстовых полей и данных, если флажки были отмечены.

Каков общий подход к подобным вещам?

Я начал с написания функции, которая зацикливала бы x раз создание нового RowDefinition внутри существующей Grid, затем внутри этой строки создала бы еще одну Grid, внутри которой Grid создавала пять строк и два столбца и добавляла все эти элементы управления, устанавливала их строки, столбцы, добавить привязку и т. д., но я думаю, что это не может быть правильным способом сделать это, это слишком много хлопот, написав все это. Должен быть лучший способ.

+0

Попробуйте DataTemplate и ItemsControl. –

ответ

0

Вы можете достичь этой функциональности, используя элемент ItemsControl и Defit Datatemplate для элементов. См. Приведенный ниже код. Я привел пример из 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; } 
} 
Смежные вопросы