Wpf datagrid处于无效状态时阻止复选框取消选中事件
在Silverlight中(但可能同样适用于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; } 绑定到基于
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
}
}