private void Evaluate() { Action action = null; foreach (KeyValuePair <IComplexVisibilityObject, bool> keyValuePair in this.listeners) { bool flag = this.Evaluate(keyValuePair.Key.ShowConditions); bool flag2 = this.Evaluate(keyValuePair.Key.HideConditions); bool flag3 = flag && !flag2; if (keyValuePair.Value != flag3) { IComplexVisibilityObject target = keyValuePair.Key; bool newState = flag3; action = (Action)Delegate.Combine(action, new Action(delegate() { this.listeners[target] = newState; target.OnStateChanged(newState); })); } } if (action != null) { action(); } }
public void Unsubscribe(IComplexVisibilityObject listener) { if (this.listeners.ContainsKey(listener)) { this.listeners.Remove(listener); } }
public void StateChanged(IComplexVisibilityObject listener, bool newState) { if (this.listeners.ContainsKey(listener)) { this.listeners[listener] = newState; } }
public void Subscribe(IComplexVisibilityObject listener, bool currentState) { if (!this.listeners.ContainsKey(listener)) { this.listeners.Add(listener, currentState); } this.Evaluate(); }