繁体   English   中英

C#/WPF:循环通过 DataGrid CheckBoxColumn - 未能在正确的时间触发代码

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM