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

Wpf datagrid处于无效状态时阻止复选框取消选中事件,wpf,silverlight,events,data-binding,datagrid,Wpf,Silverlight,Events,Data Binding,Datagrid,在Silverlight中(但可能同样适用于wpf),我有一个具有验证的datagrid,它可能会进入无效状态。我通过以下方式对此进行检查: if(grid.IsValid) { ... } 我有一个复选框,在未选中时触发保存,我希望禁用此复选框,或者如果网格处于无效状态,至少不要取消选中 比如: BeforeUncheckEvent { if(datagridisvalid) allow; else disallow; } 绑定到基于

在Silverlight中(但可能同样适用于wpf),我有一个具有验证的datagrid,它可能会进入无效状态。我通过以下方式对此进行检查:

if(grid.IsValid)
{
    ...
}
我有一个复选框,在未选中时触发保存,我希望禁用此复选框,或者如果网格处于无效状态,至少不要取消选中

比如:

BeforeUncheckEvent
{
    if(datagridisvalid)
        allow;
    else
        disallow;
}
绑定到基于网格的
IsEnabled
IsValid
会更好。这不起作用:

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

我曾尝试将另一个复选框绑定到网格,该复选框有效,即使另一个复选框与不起作用的复选框几乎相同,也能正常工作

一些代码>>

当我检查此项时:

    <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集,在编辑后出现一些错误,然后将其正确禁用(不是原始复选框,而是其旁边的复选框):



有什么想法吗?

如果您可以在选中
处理程序的任何位置访问
数据网格的引用,那么您可以尝试执行以下操作:

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

dataGrid.IsValid
为flase时,这将阻止它被选中。

在哪里定义了IsValid?在Viewmodel或codebehind中?@nit它在silverlightbro的数据网格中的一部分需要查看您的代码xaml和codebehind才能破解此漏洞。。理想情况下,它应该可以工作当您尝试
IsEnabled
绑定时,您说不起作用,您遇到了什么错误?(您可以在Visual Studio的“输出”窗口中找到错误。)@Sheridan无错误。我开始认为绑定会被删除,因为连接到它的转换器在IsInvalid=true时甚至不会被调用。。。在初始绑定之后,我所做的一切都是重置网格的itemsource,可能是以某种方式进行的…不幸的是,e.Handled/e.Cancel不存在,如果存在,我就不会有这个问题。
private void chkAllowManual_Checked(object sender, RoutedEventArgs e)
{
    if (!dataGrid.IsValid) e.Handled = true;
    else
    {
        // do your stuff here
    }
}