[英]C#/WPF: Looping through DataGrid CheckBoxColumn - failing to trigger code at the right time
使用下面的方法,我试图为循环遍历的 DataGrid CheckBoxColumn 中的每一行触发代码。 有效,什么无效。 是我还想在所有框都未选中的情况下触发另一组代码,现在,无论有多少框未选中,它都会触发代码。 除非我检查第一个。 我尝试使用 boolean 标志跳出循环
如何重新编写我的方法以达到预期的结果? 我的CheckBoxColumn
不是三态的,我还没有研究过,我宁愿不要,除非绝对必要。
public void VerifyInvoices() {
foreach (PaidTrip item in PaidTrips) {
if (item.IsChecked == true) {
ShowPreviewInvoiceDetailed();
First = false;
} else if (item.IsChecked == false && First == true) {
MessageBox.Show("You must choose an invoice to preview first.");
return;
}
}
}
我的CheckBoxColumn
:
<DataGridCheckBoxColumn
Width="146" HeaderStyle="{StaticResource CenterGridHeaderStyle}"
Binding="{Binding IsChecked, UpdateSourceTrigger=PropertyChanged}">
<DataGridCheckBoxColumn.ElementStyle>
<Style TargetType="{x:Type CheckBox}">
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="ClickMode" Value="Press"/>
</Style>
</DataGridCheckBoxColumn.ElementStyle>
</DataGridCheckBoxColumn>
仅在验证所有 PaidTrips 并且仅在未找到已检查时才显示 MessageBox:
public void VerifyInvoices()
{
bool success = false;
foreach (PaidTrip item in PaidTrips)
{
if (item.IsChecked == true)
{
ShowPreviewInvoiceDetailed();
success = true;
}
}
if (!success)
{
MessageBox.Show("You must choose an invoice to preview first.");
}
}
您可以使用 LINQ 检查所有项目是否满足条件:
...
if (item.IsChecked == true) {
ShowPreviewInvoiceDetailed();
First = false;
} else
{
if(PaidTrips.All(t => t.IsChecked == false))
{
MessageBox.Show("You must choose an invoice to preview first.");
return;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.