我试图选择所有的复选框在一个数据网格,但我没有得到任何结果使用此代码波纹管
这是我在单击主CheckBox时调用的函数
private void CheckUnCheckAll(object sender, RoutedEventArgs e)
{
CheckBox chkSelectAll = ((CheckBox)sender);
if (chkSelectAll.IsChecked == true)
{
dgUsers.Items.OfType<CheckBox>().ToList().ForEach(x => x.IsChecked = true);
}
else
{
dgUsers.Items.OfType<CheckBox>().ToList().ForEach(x => x.IsChecked = false);
}
}
字符串
dgUsers是DataGrid,但我意识到可以找到任何复选框。
这是我用来在数据网格中创建CheckBox的XAML
<DataGrid.Columns>
<DataGridCheckBoxColumn x:Name="col0" HeaderStyle="{StaticResource ColumnHeaderGripperStyle}">
<DataGridCheckBoxColumn.HeaderTemplate>
<DataTemplate>
<CheckBox Click="CheckUnCheckAll" >
</CheckBox>
</DataTemplate>
</DataGridCheckBoxColumn.HeaderTemplate>
</DataGridCheckBoxColumn>
<DataGrid.Columns>
型
这是我的数据网格的图片
的数据
是否有一些方法来选择所有的复选框编程?
编辑我已经尝试关注this steps
你可以看到我的代码是一样的,但是对我不起作用
3条答案
按热度按时间lmvvr0a81#
**TLDR;**这就是你想要的,代码如下:
x1c 0d1x的数据
执行此操作的适当位置是ViewModel。您的CheckBox可以有三种状态,您希望使用所有这些状态:
1.选中-选中每个项目
1.未选中-未选中任何项目
1.不确定-某些项目已选中,某些项目未选中
您将希望在选中/取消选中某个项目时更新CheckBox,并在CheckBox发生更改时更新所有项目-仅以一种方式实现此操作将使CheckBox处于无效状态,这可能会对用户体验产生负面影响。我的建议是:一路走好,落实到位。要做到这一点,您需要知道是哪一个导致了更改-条目的CheckBox还是标题中的CheckBox。
我会这样做:
首先,你需要一个ViewModel用于你的项目,我在这里使用了一个非常简化的模型,它只包含
IsChecked
属性。字符串
您的主ViewModel将包含所有项的集合。每当一个项目的
IsChecked
属性发生变化时,您必须检查所有项目是否被选中/未选中,并更新头部中的CheckBox(或者更确切地说是其数据源的值)。型
演示XAML:
型
72qzrwbm2#
这是基于@Manfred的solution的修改。我使用
Command
而不是event
。XAML:
字符串
视图模型:
型
源代码可用here
332nm8kg3#
您在示例中所做的是遍历数据项,而不是遍历控件(我假设您没有ItemsSource控件)。
在您发布的链接中,
YourClass
是ViewModel的类,网格行的数据对象。这一个应该在你这边用最少的代码更改就可以工作(但我更喜欢在ViewModel中使用类似CheckUncheckCommand +将
IsChecked
绑定到CommandParameter
**的东西来处理它):字符串