WPF限制datagridviewcheckboxcolumn中选中的行数
在DataGrid中,我显示一个包含属性IsEnabled的项目列表,该属性由datagridviewcheckboxcolumn表示。 我想将同时选中的复选框数量限制为5个 我怎么能这么做 编辑: 我现在所做的是使用多重绑定:转换器接受items对象的“IsEnabled”属性,并将items列表本身作为输入值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 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')