【问题标题】:checking the bool property of multiple objects simultaneously同时检查多个对象的布尔属性
【发布时间】:2013-03-20 14:03:28
【问题描述】:

我的 GUI 应用程序上有多个复选框,可以为每个相同类型的对象启用自动更新。因此,如果选中该复选框,则 isautoupdate 属性设置为 true,否则设置为 false。我有一个按钮需要在所有复选框上启用/禁用自动更新。如何检查所有对象的 isautoupdate 属性是否设置为 true 或 false。

我当前的实现是使用一个 foreach 循环,该循环遍历每个对象并检查 isautoupdate 是否设置为 true 或 false,但我得到了一个切换效果,如果选中了某些复选框,它将取消选中它们,反之亦然。

在.cs中

foreach (MxL_GUI_ChannelSettingAndStatusItem item in theGUIManager.theDevice.channelCollection)
{
    if (!item.IsAutoUpdated)
    {
        item.IsAutoUpdated = true;
    }
    else
    {
        item.IsAutoUpdated = false;
    }
}

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    我不确定我是否完全理解您的要求。如果您想检测所有项目是否设置为 true 或 false,请使用:

    var items = theGUIManager.theDevice.channelCollection;
    
    // If you need to know if for all items IsAutoUpdated = true
    bool allChecked = items.All(item => item.IsAutoUpdated);
    
    // If you need to know if they're all false
    bool noneChecked = !items.Any(item => item.IsAutoUpdated);
    

    然后更新您的项目,例如:

    foreach(var item in items) { item.IsAutoUpdated = !allChecked; }
    

    【讨论】:

    • 感谢您的解决方案菲尔。如果在代码中不使用,为什么要声明 noneChecked?
    • 只是因为您问如何检查所有对象是否设置为真或假。
    【解决方案2】:

    如果您不希望您的从复选框切换,那么不要编写切换它们的代码。相反,请选中主复选框的 IsChecked 属性并将该值应用于项目的所有 IsAutoUpdated 属性:

    foreach (MxL_GUI_ChannelSettingAndStatusItem item in ...)
    {
        item.IsAutoUpdated = masterCheckbox.IsChecked.Value;
    }
    

    【讨论】:

    • 谢谢乔恩,我最终选择了主复选框而不是按钮,您的解决方案非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2013-12-19
    • 1970-01-01
    • 2022-07-13
    • 1970-01-01
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多