Ejemplo n.º 1
0
        public void SetState(object newState)
        {
            if (State == newState)
            {
                return;
            }

            if (newState == null)
            {
                // delete all children
                return;
            }
            Debug.WriteLine("SetState");

            var properties = new ObjectDescriptor().GetProperties(newState);

            Debug.WriteLine("Properties: " + string.Join(", ", properties.Select(p => p.Name)));
            foreach (var property in properties)
            {
                var value = property.GetValue(newState);

                object oldValue;
                var    exists  = Children.TryGetValue(property.Name, out oldValue);
                bool   changed = false;
                SetChild(oldValue, ref value, out changed);

                if (exists)
                {
                    Children[property.Name] = value;
                }
                else
                {
                    Children.Add(property.Name, value);
                }
                if (changed)
                {
                    RaisePropertyChanged(property.Name);
                }
            }

            State = newState;
        }