2011-08-11 2 views
4

J'ai un listBox avec la case à cocher, quand un événement se termine, je dois décocher chaque case à cocher.Effacer les valeurs d'une CheckBoxList?

Ceci est mon xaml, mais dans le code comment puis-je effacer ces valeurs? Merci

<ListBox Name="_employeeListBox" ItemsSource="{Binding employeeList}" Margin="409,27,41,301"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition /> 
        <ColumnDefinition /> 
        <ColumnDefinition /> 
        <ColumnDefinition /> 
        <ColumnDefinition /> 
       </Grid.ColumnDefinitions> 
       <CheckBox Grid.Column="0" Name="CheckBoxZone" Content="{Binding OperatorNum}" Tag="{Binding TheValue}" Checked="CheckBoxZone_Checked"/> 
       <TextBlock Grid.Column="1"></TextBlock> 
       <TextBlock Grid.Column="2" Text="{Binding Name}"></TextBlock> 
       <TextBlock Grid.Column="3"></TextBlock> 
       <TextBlock Grid.Column="4" Text="{Binding LastName}"></TextBlock> 
      </Grid> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

    private void _searchProjectsbyEmployeebutton_Click_1(object sender, RoutedEventArgs e) 
    { 
     List<EmployeebyProject> employeebyProjectList = new List<EmployeebyProject>(); 
     if (EmployeeCollectionToInsert.Count != 0) 
     { 
      foreach (var employee in EmployeeCollectionToInsert) 
      { 
       foreach(var employeebyProject in employee.EmployeebyProject) 
       { 
        employeebyProjectList.Add(employeebyProject); 
       } 
      } 
      LoadEmployeebyProject(employeebyProjectList); 
      //HERE I NEED UNCHECKED the ListBoxChecked.    
     } 
     else { MessageBox.Show("Please select an employee to search his project."); } 
    } 
+0

Je suggère que votre applicaiton a besoin de plus de séparation entre la vue et le ViewModel. – EtherDragon

Répondre

1

This post explique comment vous pouvez obtenir les éléments d'une base TemplateListBox. Vous pouvez utiliser une technique similaire pour trouver le CheckBox et une fois que vous avez avez le CheckBox, la vérification ou décochant est simple

+0

Le problème est que je travaille dans wpf, et FindVisualChild ne fonctionne pas ici, peut-être que vous avez d'autres références pour faire ceci ... – ale

+0

Le lien que j'ai posté est un exemple WPF et 'FindViusalChild' fonctionne définitivement. C'est une méthode écrite dans le même post. –

2

vous liez ItemsSource dans le ListBox et l'ListBox utilise-t-VirtualizingStackPanel comme ItemsPanel de sorte que tous ListBoxItem conteneurs peuvent ou ne peuvent ne pas être généré à un moment donné.
Ainsi, même si vous effectuez une recherche dans l'arborescence Visual, etc., pour décocher toutes les cases à cocher, vous ne pouvez pas être sûr que vous les avez toutes décochées.

Je vous suggère de lier IsChecked à une nouvelle propriété dans la même classe que vous avez défini OperatorNum (qui, par l'apparence de votre question, est probablement employé ou similaire). De cette façon, tout ce que vous devez faire pour décocher les CheckBoxes est de mettre IsChecked à False dans votre classe source.
Aussi assurez-vous de mettre en œuvre INotifyPropertyChanged

Exemple Xaml

<CheckBox Grid.Column="0" 
      Name="CheckBoxZone" 
      Content="{Binding OperatorNum}" 
      Tag="{Binding TheValue}" 
      IsChecked="{Binding IsChecked}"/> 

employé

public class Employee : INotifyPropertyChanged 
{ 
    private bool m_isChecked; 
    public bool IsChecked 
    { 
     get { return m_isChecked; } 
     set 
     { 
      m_isChecked = value; 
      OnPropertyChanged("IsChecked"); 
     } 
    } 
    // Etc.. 

    public event PropertyChangedEventHandler PropertyChanged; 
    private void OnPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 
Questions connexes