【发布时间】:2012-04-30 20:04:54
【问题描述】:
我创建了一个包含 4 列的数据表,其中 3 列是字符串,另一列是布尔类型。 我将数据表(xmldatadocument)映射到 wpf 中的 datagridview。 所以结果看起来数据网格中的文本列和复选框列。 我在复选框列标题中添加了一个复选框标题模板。 当 i\header 复选框未选中时,我可以取消选中列中的所有复选框。 当标题 chekcbox 被选中时,我还可以检查列中的所有复选框。但是如果未选中该列中的一个复选框,我也需要取消选中标题复选框。 请帮我解决这个问题.. 我在下面添加了屏幕截图、XAML 和代码。
PS:使用 WPF 数据网格。
<dg:DataGrid.Columns>
<dg:DataGridCheckBoxColumn Binding="{Binding Check}" Width="50" >
<dg:DataGridCheckBoxColumn.HeaderTemplate>
<DataTemplate x:Name="dtAllChkBx">
<CheckBox Name="cbxAll" Content="{x:Static properties:Resources.lblAll}" Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked"></CheckBox>
</DataTemplate>
</dg:DataGridCheckBoxColumn.HeaderTemplate>
public static ObservableCollection<Lst> list = new ObservableCollection<Lst>();
private void CheckBox_Checked(object sender, RoutedEventArgs e)
{
for (int i = 0; i < list.Count; i++)
{
list[i].Check = true;
}
}
private void CheckBox_Unchecked(object sender, RoutedEventArgs e)
{
for (int i = 0; i < list.Count; i++)
{
list[i].Check = false;
}
}
public class Lst : ObservableCollection<Lst>
{
public bool Check { get; set; }
}
【问题讨论】:
-
您是否应该在 Checked 事件上将 check 设置为 true,在 Unchecked 事件上设置为 false?你似乎做了相反的事情。另外,lst 是否绑定到网格中的复选框列?
-
@Dzire 我更正了。是的 lst 绑定到网格中的复选框列。
-
您是否在绑定到复选框列的属性上调用了属性更改?我试过了。我也绑定了标题复选框并更改了绑定到列的属性。它的工作
-
@Dzire 你能把代码放在这里吗?我也会试试。
-
@user1328637 请在您的班级
Lst中实现INotifypropertyChanged。还可以阅读MVVM上的内容。您班级中的 SetterLst没有Change notificationINotifyPropertyChnaged会给您一个事件,您可以在PropertyCheck的 setter 中提出该事件。是的,在这种情况下,我们通常不使用 `Auto 属性。请更改为带有支持字段的属性。
标签: wpf checkbox wpfdatagrid observablecollection datagridcolumnheader