Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF限制datagridviewcheckboxcolumn中选中的行数_Wpf_Binding_Datagrid_Checkbox_Multibinding - Fatal编程技术网

WPF限制datagridviewcheckboxcolumn中选中的行数

WPF限制datagridviewcheckboxcolumn中选中的行数,wpf,binding,datagrid,checkbox,multibinding,Wpf,Binding,Datagrid,Checkbox,Multibinding,在DataGrid中,我显示一个包含属性IsEnabled的项目列表,该属性由datagridviewcheckboxcolumn表示。 我想将同时选中的复选框数量限制为5个 我怎么能这么做 编辑: 我现在所做的是使用多重绑定:转换器接受items对象的“IsEnabled”属性,并将items列表本身作为输入值 <DataGrid ItemsSource="{Binding MyItems}" AutoGenerateColumns="false"

在DataGrid中,我显示一个包含属性IsEnabled的项目列表,该属性由datagridviewcheckboxcolumn表示。 我想将同时选中的复选框数量限制为5个

我怎么能这么做

编辑:

我现在所做的是使用多重绑定:转换器接受items对象的“IsEnabled”属性,并将items列表本身作为输入值

<DataGrid ItemsSource="{Binding MyItems}" AutoGenerateColumns="false" 
                  CanUserAddRows="False" CanUserDeleteRows="False" CanUserReorderColumns="False" CanUserSortColumns="false">
        <DataGrid.Columns>
          <DataGridCheckBoxColumn Header="" Binding="{Binding Path=IsEnabled, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
            <DataGridCheckBoxColumn.CellStyle>
              <Style>
                <Setter Property="CheckBox.IsEnabled" >
                  <Setter.Value>
                    <MultiBinding Converter="{Utilities:MyConverter}">
                      <Binding Path="IsEnabled" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged"/>
                      <Binding Path="DataContext.MyItems" RelativeSource="{RelativeSource AncestorType=UserControl}"/>
                    </MultiBinding>
                  </Setter.Value>
                </Setter>
             </Style>
            </DataGridCheckBoxColumn.CellStyle>
          </DataGridCheckBoxColumn>
...
我还尝试设置datagrids名称并在绑定中使用“ElementName”,但我一直收到相同的警告,尽管行为是正确的


为什么我会收到这些警告?

在ctr中,每个项目都会传递集合。在IsEnabled属性上,如果当前集合有5个IsEnabled=True,则拒绝True。

将事件处理程序添加到复选框选中的事件。检查基础数据源的记录以查看已检查的记录数,如果超过5条记录,则取消已检查事件。

谢谢,但我希望通过绑定解决此问题,因为我使用的是MVVM。因此,在代码隐藏中使用选中的事件处理程序不是我想要的。
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
  var val1 = (bool)values[0];
  int numSelected = 0;

  if (values[1] != null && values[1] is ObservableCollection<MyTestItem>)
  {
    var list = (ObservableCollectionBase<MyTestItem>)values[1];
    foreach (MyTestItem mti in list)
    {
      if (mti.IsEnabled)
        numSelected++;
    }
  }
  else
  {
    return false;
  }

 return val1 ? val1 : (numSelected < 5);
}
System.Windows.Data Warning: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.UserControl', AncestorLevel='1''. BindingExpression:Path=DataContext.MyItems; DataItem=null; target element is 'DataGridCell' (Name=''); target property is 'IsEnabled' (type 'Boolean')