2013-03-29 41 views
1

我的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; 
    } 
} 

回答

3

如果你不希望你的奴隸複選框來切換那就不要寫他們切換代碼。相反,檢查主複選框的IsChecked屬性和值適用於您的項目的所有IsAutoUpdated屬性:

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

感謝喬恩,我結束了與主複選框,而不是去一個按鈕和您的解決方案非常感謝! – Art

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; } 
+0

感謝您的解決方案菲爾。如果你沒有在代碼中使用它,你爲什麼要聲明noneChecked? – Art

+0

僅僅因爲您詢問如何檢查所有對象是否設置爲true或false。 – Phil