예제 #1
0
    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();
        }
    }
예제 #2
0
 public void Unsubscribe(IComplexVisibilityObject listener)
 {
     if (this.listeners.ContainsKey(listener))
     {
         this.listeners.Remove(listener);
     }
 }
예제 #3
0
 public void StateChanged(IComplexVisibilityObject listener, bool newState)
 {
     if (this.listeners.ContainsKey(listener))
     {
         this.listeners[listener] = newState;
     }
 }
예제 #4
0
 public void Subscribe(IComplexVisibilityObject listener, bool currentState)
 {
     if (!this.listeners.ContainsKey(listener))
     {
         this.listeners.Add(listener, currentState);
     }
     this.Evaluate();
 }