2010-04-18 6 views
1

J'ajoute dynamiquement à des cases à cocher silverlight objet StackPanel comme suit:Comment lire la case à cocher dynamique ajoutée?

foreach (String userName in e.Result) 
{ 
    CheckBox ch = new CheckBox(); 
    ch.Name = userName; 
    ch.Content = userName; 
    ContentStackPanel.Children.Add(ch); 
} 

Comment puis-je relues ces contrôles pour détecter quels sont contrôlés.

Répondre

1

Vous devriez probablement éviter créer des cases à cocher dans un code comme celui-ci. Quelque chose qui pourrait vous être utile est un mini "ViewModel" pour la case à cocher. Quelque chose comme ceci:

public class Option 
{ 
    public string Text {get; set;} 
    public bool IsChecked {get; set;} 
} 

Ensuite, vous pouvez avoir une collection de ces options comme celle-ci:

var options = new ObservableCollection<Option>(); 

Une fois que cela est rempli, vous pouvez lier le ObservableCollection à un ItemsControl:

<ItemsControl ItemsSource="{Binding options}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <CheckBox Content="{Binding Text}" IsChecked="{Binding IsChecked}" /> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

XAML créera les CheckBox pour vous pour toujours option que vous avez ajouté à votre collection d'options. La chose vraiment grande est que vous pouvez maintenant vous demander des options collection options qui ont été sélectionnées:

var selectedNames = from option in options 
        where option.IsChecked 
        select option.Text; 

En utilisant la liaison de données et des modèles est une technique que vous devez vous familiariser avec Silverlight/WPF. C'est un concept très important, et il vous permettra de faire des choses incroyables dans votre application.

3

Vous pouvez utiliser la liaison de données dans la liste de cases à cocher. Quelque chose comme ceci:

Utilisez une zone de liste pour créer la liste de contrôle:

<ListBox x:Name="chkList" > 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal" > 
        <CheckBox Content="{Binding userName}" IsChecked="{Binding Checked, Mode=TwoWay}"></CheckBox> 
       </StackPanel> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

Puis dans votre code vient de mettre la chklist ItemSource à un ObservableCollection avec votre objet

chkList.ItemsSource = .... 
+1

J'hésiterais à suggérer un ListBox ici. L'OP est en train de peupler un StackPanel et un ListBox est une bête beaucoup plus grande avec un comportement de sélection et de survol qui n'est pas voulu ici. A la place, un ItemsControl est une construction beaucoup plus appropriée à utiliser pour @Manoj. –

Questions connexes