В ситуациях, когда вам нужны элементы управления для связи друг с другом между иерархиями объектов, лучше использовать шаблон наблюдателя следующим образом (при необходимости может быть адаптирован как серверный или клиентский код):
Начните с простого класса для представления уведомителя:
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI.WebControls;
public class CheckAllManager
{
public static CheckAllManager Instance
{
get
{
if (HttpContext.Current.Session["CheckAllManager"] == null)
{
HttpContext.Current.Session["CheckAllManager"] = new CheckAllManager();
}
return (CheckAllManager)HttpContext.Current.Session["CheckAllManager"];
}
}
private HashSet<CheckBox> checkboxes = new HashSet<CheckBox>();
private CheckAllManager() { }
public void Register(CheckBox checkbox)
{
checkboxes.Add(checkbox);
}
public void Unregister(CheckBox checkbox)
{
checkboxes.Remove(checkbox);
}
public void CheckAll(bool checkState)
{
foreach (CheckBox checkbox in checkboxes)
{
checkbox.Checked = checkState;
}
}
}
Очевидно, вы должны адаптировать этот класс к вашим собственным потребностям, но это очень просто:
- Звоните
CheckAllManager.Instance.Register(checkbox)
при создании флажка.
- Звоните
CheckAllManager.Instance.Unregister(checkbox)
при наличии флажка.
- Позвоните
CheckAllManager.Instance.CheckAll(state)
, чтобы установить состояние всех флажков, зарегистрированных в классе.
Этот метод работает, не полагаясь на чекбоксы, которые будут названы определенным образом, или не повторяя каждый объект коллекции.