C#/WPF:循环遍历 DataGrid CheckBoxColumn - 未能在正确的时间触发代码
C#/WPF: Looping through DataGrid CheckBoxColumn - failing to trigger code at the right time
使用下面的方法,我试图为我正在循环的 DataGrid CheckBoxColumn 中的每一行触发代码。有用!不起作用的是,如果所有框都未选中,我还想触发另一组代码。
现在,无论有多少框未选中,它都会触发代码,除非我选中第一个。我尝试使用布尔标志跳出循环
如何重写我的方法来达到预期的结果?
我的 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>
您可以使用 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;
}
}
仅在所有 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.");
}
}
使用下面的方法,我试图为我正在循环的 DataGrid CheckBoxColumn 中的每一行触发代码。有用!不起作用的是,如果所有框都未选中,我还想触发另一组代码。 现在,无论有多少框未选中,它都会触发代码,除非我选中第一个。我尝试使用布尔标志跳出循环
如何重写我的方法来达到预期的结果?
我的 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>
您可以使用 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;
}
}
仅在所有 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.");
}
}