2013-06-26 4 views
1

J'ai étudié ce problème mais cela est résolu en mode design et code-behind. mais mon problème est petite différence: j'essaye de faire ceci seulement comme code-behind parce que mes cases à cocher sont dynamiquement créées selon les données de base de données. En d'autres termes, nombre de mes cases à cocher n'est pas stable. Je veux cocher une seule case dans le groupe de cases à cocher. Quand j'ai cliqué sur une case à cocher, je veux que la propriété ischecked des autres cases à cocher devienne false. C'est la même propriété dans radiobuttons. je prends mes cases à cocher d'un StackPanel à côté XAML:checkbox comme radiobutton wpf C#

<StackPanel Margin="4" Orientation="Vertical" Grid.Row="1" Grid.Column="1" Name="companiesContainer"> 
      </StackPanel> 

mes xaml.cs:

using (var c = new RSPDbContext()) 
     { 
      var q = (from v in c.Companies select v).ToList(); 

      foreach (var na in q) 
      { 
       CheckBox ch = new CheckBox(); 
       ch.Content = na.Name; 
       ch.Tag = na; 
       companiesContainer.Children.Add(ch); 
      } 
     } 

foreach (object i in companiesContainer.Children) 
      { 
       CheckBox chk = (CheckBox)i; 

       chk.SetBinding(ToggleButton.IsCheckedProperty, "DataItem.IsChecked"); 
      } 

Comment puis-je fournir cette propriété en cases à cocher xaml.cs? merci d'avance ..

+0

une raison quelconque vous Voulez-vous faire des cases à cocher se comportent comme des boutons radio au lieu d'utiliser des boutons radio? –

+0

je me demande juste comment faire cela.je voulais essayer cela. – rockenpeace

+0

désolé..now j'ai réalisé que j'ai le choix qu'aucune de ces cases à cocher ne peut être vérifiée – rockenpeace

Répondre

3

Ajoutez un gestionnaire d'événement pour l'événement checked. Lorsque vous créez la case à cocher, ajoutez ce (même) gestionnaire d'événement à chaque case à cocher.

Dans le gestionnaire d'événements, parcourez chaque case à cocher que vous avez ajoutée et, pour chaque case à cocher, décochez-la SAUF dans la même case que l'expéditeur.

Ce que je pense devrait faire l'affaire (sur le dessus de ma tête).

Voici un code que je viens en cloque qui devrait aider:

partie XAML est juste un panneau de pile appelé: Name = "checkboxcontainer"

partie CodeBehind:

public MainWindow() 
    { 
     InitializeComponent(); 
     this.Loaded += MainWindow_Loaded; 
    } 

    private void MainWindow_Loaded(object sender, RoutedEventArgs e) 
    { 
     CreateCheckboxes(); 
    } 

    private void CreateCheckboxes() 
    { 
     for (int i = 0; i <= 5; i++) 
     { 
      CheckBox c = new CheckBox(); 
      c.Name = "Check" + i.ToString(); 
      c.Checked += c_Checked; //This is adding the event handler to the checkbox 
      checkboxcontainer.Children.Add(c); 
     } 
    } 

    // This is the event handler for the checkbox 
    private void c_Checked(object sender, RoutedEventArgs e) 
    { 
     foreach (var control in checkboxcontainer.Children) 
     { 
      if (control is CheckBox && control != sender) 
      { 
       CheckBox cb = (CheckBox)control; 
       cb.IsChecked = false; 
      } 
     } 
    } 
+0

je vais essayer et je vais donner un retour .. merci .. – rockenpeace

+0

Est-ce que cela a fonctionné? Désolé, je n'ai pas pu fournir de code en si peu de temps. – BaconSah

+0

non .. Malheureusement, je ne pouvais pas faire cela .. – rockenpeace