2017-07-18 190 views
0

我想通过选择带有“以上所有”的复选框名称来选中所有复选框。 复选框是在列表框中选择所有复选框WPF

<ListBox SelectionMode="Multiple" 
     BorderThickness="0" 
     ItemsSource="{Binding QuestionThreeSelection}" 
     SelectedItem="{Binding QuestionThreeSelection}" 
     Name="listBoxList" 
     SelectionChanged="listBoxList_SelectionChanged"> 
    <ListBox.InputBindings> 
     <KeyBinding Command="ApplicationCommands.SelectAll" 
        Modifiers="Ctrl" 
        Key="A" /> 
    </ListBox.InputBindings> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <CheckBox Checked="CheckBox_Checked_1" 
         Content="{Binding SourceName}" 
         IsChecked="{Binding Path=IsSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

回守则

private void CheckBox_Checked_1(object sender, RoutedEventArgs e) 
{   
    var oo = listBoxList; 
    CheckBox cb = (CheckBox)sender; 
    //var w=e; 

    IEnumerable<AddSource> listallityem = ((IEnumerable<AddSource>)listBoxList.Items.SourceCollection).Where(r => r.IsSelected == false); 
    //IEnumerable<AddSource> listallityem1 = ((IEnumerable<AddSource>)listBoxList.Items.SourceCollection); 

    AddSource vv = cb.DataContext as AddSource; 
    if ((bool) cb.IsChecked) 
    { 

    } 

    if (vv.SourceName== "All of the above") 
    { 
     r = listBoxList.ItemsSource; 

     foreach (AddSource item in wer) 
     { 
      item.IsSelected = true; // false in case of unselect 
     } 
    } 
} 

有人能提出一个方法?

+0

你可以在ViewModel中处理所有的,因为你有绑定。 – Rekshino

回答

1

您可以处理CheckedUnchecked事件为贵“的所有上述” CheckBox是这样的:

private void CheckBox_Checked(object sender, RoutedEventArgs e) 
{ 
    SelectAll(true); 
} 

private void CheckBox_Unchecked(object sender, RoutedEventArgs e) 
{ 
    SelectAll(false); 
} 

private void SelectAll(bool select) 
{ 
    var all = listBoxList.ItemsSource as IEnumerable<AddSource>; 
    if (all != null) 
    { 
     foreach (var source in all) 
      source.IsSelected = select; 
    } 
} 

确保您AddSource类实现INotifyPropertyChanged和的二传手提高PropertyChanged事件财产。

+0

是的确切原因是我没有实现INotifyPropertyChanged.now它的工作原理..谢谢 – MSKP