2011-08-11 4 views
4

私はチェックボックス付きのlistBoxを1つ持っています。イベントが終了すると、各チェックボックスをオフにする必要があります。CheckBoxListの値をクリアしますか?

これは私のxamlですが、どのようにこの値をクリアすることができますか?おかげ

<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

を実装することを確認してください私はあなたのapplicaitonビューとビューモデルの間でより多くの分離が必要であることを示唆しています。 – EtherDragon

答えて

1

Thisポストは、あなたがListBoxベースTemplateのアイテムを取得する方法について説明します。あなたは見つけるために、同様の手法を使用しCheckBox、あなたがチェックCheckBoxを、持っているか、チェックを外すとは単純になると

+0

問題はwpfで作業していますが、FindVisualChildはここでは動作しません。これを行うための他の参照がある可能性があります。 – ale

+0

投稿したリンクはWPFの例で、 'FindViusalChild'は間違いなく動作します。それは同じ記事に書かれた方法です。 –

2

あなたはListBoxItemsSourceに結合され、ListBoxはそのItemsPanelとしてVirtualizingStackPanelを使用しているので、すべてのListBoxItemのコンテナかもしれないまたはかもしれないことができますいつでも生成することはできません。
チェックボックスをすべてオフにするためにビジュアルツリーなどを検索しても、チェックボックスをすべてオフにしていることを確認することはできません。

OperatorNumと定義されているのと同じクラスの新しいプロパティにIsCheckedをバインドすることをお勧めします(あなたの疑問に思われるのは、おそらくEmployeeなどです)。このようにして、チェックボックスのチェックを外すために必要なのは、ソースクラスのIsCheckedFalseに設定することだけです。
はまた、あなたがINotifyPropertyChanged

例のXAML

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

従業員

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)); 
     } 
    } 
} 
関連する問題