当datagrid处于无效状态时,阻止复选框取消选中事件

时间:2013-09-05 13:53:12

标签: wpf silverlight events data-binding datagrid

在Silverlight中(但可能同样适用于wpf)我有一个数据网格,它有验证并且可能进入无效状态。我通过以下方式检查:

if(grid.IsValid)
{
    ...
}

我有一个复选框,在取消选中时会触发保存,我希望禁用此复选框,或者至少不取消选中网格是否处于无效状态。

类似的东西:

BeforeUncheckEvent
{
    if(datagridisvalid)
        allow;
    else
        disallow;
}

根据网格IsEnabled绑定到IsValid会更好。这不起作用:

IsEnabled="{Binding ElementName=grid, Path=IsValid, UpdateSourceTrigger=PropertyChanged}"

UPDATE>>

我已经尝试将另一个复选框绑定到网格IsValid,并且即使其他复选框几乎与不起作用的复选框相同也是如此。

某些代码>>

当我查看时:

    <CheckBox x:Name="chkAllowManual" Checked="chkAllowManual_Checked" Unchecked="chkAllowManual_Unchecked" Content="Allow Manual" VerticalAlignment="Center" Margin="3,0,7,0" IsEnabled="{Binding ElementName=grdPrices, Path=IsValid}">
    </CheckBox>

网格获取其itemsource设置,编辑后出现一些错误然后被正确禁用(不是原始复选框,而是旁边的复选框):

    <CheckBox x:Name="chkAllowManual1" Checked="chkAllowManual_Checked" Unchecked="chkAllowManual_Unchecked" Content="Allow Manual1" VerticalAlignment="Center" Margin="3,0,7,0" IsEnabled="{Binding ElementName=grdPrices, Path=IsValid}">
    </CheckBox>

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

如果您可以在DataGrid处理程序的任何地方访问Checked的引用,那么您可以尝试这样做:

private void chkAllowManual_Checked(object sender, RoutedEventArgs e)
{
    if (!dataGrid.IsValid) e.Handled = true;
    else
    {
        // do your stuff here
    }
}

这可以阻止dataGrid.IsValid出现时检查它。