Очистить значения CheckBoxList? - PullRequest
       1

Очистить значения CheckBoxList?

4 голосов
/ 11 августа 2011

У меня есть один флажок listBox с флажком, когда по окончании события мне нужно снять каждый флажок.

Это мой 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."); }
    }

Ответы [ 2 ]

2 голосов
/ 12 августа 2011

Вы связываете ItemsSource в ListBox, а ListBox использует VirtualizingStackPanel в качестве своей ItemsPanel, поэтому все контейнеры ListBoxItem могут создаваться или не создаваться в любой момент времени.
Поэтому, даже если вы будете искать в дереве визуалов и т. Д., Чтобы снять все флажки, вы не можете быть уверены, что сняли их все.

Я предлагаю вам связать IsChecked с новым свойством того же класса, который вы определили OperatorNum (который, судя по вашему вопросу, вероятно, является Employee или аналогичным). Таким образом, все, что вам нужно сделать, чтобы снять флажки CheckBox, это установить IsChecked в False в вашем исходном классе.
Также убедитесь, что вы внедрили INotifyPropertyChanged

Пример Xaml

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

Employee

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));
        }
    }
}
1 голос
/ 11 августа 2011

Этот пост объясняет, как вы можете получить предметы на основе Template ListBox. Вы можете использовать подобную технику, чтобы найти CheckBox, и как только вы получите CheckBox, проверка или снятие отметки проста

...