0

在一个窗口中有一个 lisbox,它绑定到一个Employee类型的列表,每个员工姓名旁边都有复选框,可以单独选择。

得到另一个带有“全选”选项的控制复选框。

通过将全选复选框的 isChecked 绑定到我的 viewModel 中的属性IsSelectAllChecked ,我可以轻松地“全选”“全选” 。

但是,如果全选选项为真,并且 lisbox 中的每个员工项目都被选中。如果我取消选中其中一个项目,我如何从全选选项复选框中删除检查。

 <StackPanel Grid.Row="1">
        <CheckBox Margin="20,15,0,15" IsChecked="{Binding Path=IsSelectAllChecked}">
            <TextBlock VerticalAlignment="Center" Text="Select All" />
    </CheckBox>

任何人都可以建议

4

2 回答 2

0

员工的IsChecked复选框也应该绑定到IsSelected员工视图模型的属性。在该属性的设置器中,您可以评估是否IsSelectAllChecked需要更改。

于 2012-09-20T14:59:45.870 回答
0

这是我的做法:

这是您的全选Checkbox和绑定属性:

<CheckBox Margin="20,15,0,15" Content="Select all"
     IsChecked="{Binding Path=IsSelectAllChecked, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

public bool IsSelectAllChecked
{
  get
  {
     return isSelectAllChecked
  }
  set
  {
    isSelectAllChecked = value;
    // Do some code here to turn all selected booleans to true
    SelectAll();
    OnPropertyChanged("IsSelectAllChecked"); // Fire OnPropertyChanged event, important for TwoWay Binding!!
}

请注意,Bindingfor yourCheckBox现在处于TwoWay模式,并且带有UpdateSourceTrigger=PropertyChanged. 这将允许:

  • 从代码 ( TwoWay)更改绑定属性的值
  • 更新CheckBox值时更新状态 ( UpdateSourceTrigger=PropertyChanged)

接下来:这是您的复选框之一,代码中的等价物

<CheckBox  Content="Select one"
     IsChecked="{Binding Path=OneOfYourBools, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

public bool OneOfYourBools
{
  get
  {
     return oneOfYourBools;
  }
  set
  {
    oneOfYourBools = value;
    // If the isAllSelected was true, turn it to false!
    if (this.IsSelectAllChecked)
    {
       this.IsSelectAllChecked = false;
    }
    OnPropertyChanged("OneOfYourBools"); // Fire OnPropertyChanged event, important for TwoWay Binding!!
}

这应该可以解决问题:当bool更新一个时,selectAll布尔值也会更新,反之亦然

于 2012-09-20T15:11:27.950 回答