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.");
    }
}