public static TResult Eval <TObj, TResult>(this ComputedProperty <TObj, TResult> property, TObj obj, [CallerMemberName] string?name = null) where TObj : IDependenciesTarget
        {
            if (name == null)
            {
                throw new ArgumentNullException(nameof(name));
            }

            var(dependencies, cookie) = ComputedPropertyStorage.GetDependencyStorage();
            var listEmpty = dependencies.Count == 0;

            try {
                return(property.CallAndGetDependencies(obj, dependencies, cookie));
            }
            finally {
                obj.SetDependencies(name, dependencies, cookie);
                RemoveMatchingInputs(dependencies, cookie);
                Debug.Assert(!listEmpty || dependencies.Count == 0);
            }
        }
        public static TResult Eval <TObj, TResult>(this ComputedProperty <TObj, TResult> property, TObj obj, [AllowNull] ref TResult lastVal, [CallerMemberName] string?name = null) where TObj : IDependenciesTarget, IIsPropertyValid
        {
            if (name == null)
            {
                throw new ArgumentNullException(nameof(name));
            }

            if (obj.IsPropertyValid(name))
            {
                return(lastVal !);
            }
            else
            {
                var result = Eval(property, obj, name);
                if (lastVal == null || !EqualityComparer <TResult> .Default.Equals(lastVal, result))
                {
                    lastVal = result;
                }

                obj.SetPropertyValid(name);
                return(lastVal);
            }
        }
示例#3
0
 public override void Initialize(Invert.IOC.UFrameContainer container)
 {
     container.RegisterInstance <IDocumentationProvider>(new uFrameMVVMDocumentationProvider(), "uFrameMVVM");
     container.RegisterInstance <IEditorCommand>(GetCommandsSelectionCommand(), typeof(CommandsChildItem).Name + "TypeSelection");;
     container.AddTypeItem <CommandsChildItem>();
     container.RegisterInstance <IEditorCommand>(GetPropertiesSelectionCommand(), typeof(PropertiesChildItem).Name + "TypeSelection");;
     container.AddTypeItem <PropertiesChildItem>();
     container.RegisterInstance <IEditorCommand>(GetCollectionsSelectionCommand(), typeof(CollectionsChildItem).Name + "TypeSelection");;
     container.AddTypeItem <CollectionsChildItem>();
     container.AddItem <BindingsReference>();
     container.AddItem <SubPropertiesReference>();
     container.AddTypeItem <InstancesReference>();
     container.AddItem <TransitionsChildItem>();
     container.AddItem <StateTransitionsReference>();
     container.AddItem <HandlersReference>();
     Element = container.AddNode <ElementNode, ElementNodeViewModel, ElementNodeDrawer>("Element");
     Element.Inheritable();
     Element.Color(NodeColor.DarkGray);
     Element.HasSubNode <SimpleClassNode>();
     Element.HasSubNode <ViewNode>();
     Element.HasSubNode <ComputedPropertyNode>();
     Element.HasSubNode <StateMachineNode>();
     Element.HasSubNode <ViewComponentNode>();
     Element.HasSubNode <CommandNode>();
     SimpleClass = container.AddNode <SimpleClassNode, SimpleClassNodeViewModel, SimpleClassNodeDrawer>("SimpleClass");
     SimpleClass.Inheritable();
     SimpleClass.Color(NodeColor.DarkDarkGray);
     View = container.AddNode <ViewNode, ViewNodeViewModel, ViewNodeDrawer>("View");
     View.Inheritable();
     View.Color(NodeColor.Blue);
     ComputedProperty = container.AddNode <ComputedPropertyNode, ComputedPropertyNodeViewModel, ComputedPropertyNodeDrawer>("ComputedProperty");
     ComputedProperty.Color(NodeColor.Green);
     Subsystem = container.AddGraph <SubsystemGraph, SubsystemNode>("SubsystemGraph");
     Subsystem.Color(NodeColor.Purple);
     Subsystem.HasSubNode <ElementNode>();
     Subsystem.HasSubNode <SimpleClassNode>();
     Subsystem.HasSubNode <CommandNode>();
     Subsystem.HasSubNode <ServiceNode>();
     SceneType = container.AddNode <SceneTypeNode, SceneTypeNodeViewModel, SceneTypeNodeDrawer>("SceneType");
     SceneType.Color(NodeColor.Orange);
     MVVM = container.AddGraph <MVVMGraph, MVVMNode>("MVVMGraph");
     MVVM.Color(NodeColor.Gray);
     MVVM.HasSubNode <SubsystemNode>();
     MVVM.HasSubNode <SceneTypeNode>();
     StateMachine = container.AddGraph <StateMachineGraph, StateMachineNode>("StateMachineGraph");
     StateMachine.Color(NodeColor.Orange);
     StateMachine.HasSubNode <StateNode>();
     State = container.AddNode <StateNode, StateNodeViewModel, StateNodeDrawer>("State");
     State.Color(NodeColor.Green);
     ViewComponent = container.AddNode <ViewComponentNode, ViewComponentNodeViewModel, ViewComponentNodeDrawer>("ViewComponent");
     ViewComponent.Color(NodeColor.Orange);
     Command = container.AddNode <CommandNode, CommandNodeViewModel, CommandNodeDrawer>("Command");
     Command.Inheritable();
     Command.Color(NodeColor.Black);
     Service = container.AddGraph <ServiceGraph, ServiceNode>("ServiceGraph");
     Service.Color(NodeColor.Black);
     container.Connectable <ElementNode, InstancesReference>();
     container.Connectable <ElementNode, Element>();
     container.Connectable <PropertiesChildItem, BindingsReference>();
     container.Connectable <PropertiesChildItem, SceneProperties>();
     container.Connectable <PropertiesChildItem, SubPropertiesReference>();
     container.Connectable <PropertiesChildItem, StateMachineNode>();
     container.Connectable <CollectionsChildItem, BindingsReference>();
     container.Connectable <CommandsChildItem, BindingsReference>();
     container.Connectable <CommandsChildItem, TransitionsChildItem>();
     container.Connectable <PropertiesChildItem, BindingsReference>();
     container.Connectable <PropertiesChildItem, ComputedPropertyNode>();
     container.Connectable <CollectionsChildItem, BindingsReference>();
     container.Connectable <ViewNode, ViewComponentNode>();
     container.Connectable <ComputedPropertyNode, TransitionsChildItem>();
     container.Connectable <ComputedPropertyNode, ComputedPropertyNode>();
     container.Connectable <TransitionsChildItem, StateTransitionsReference>();
     container.Connectable <StartState, StateNode>();
     container.Connectable <StateTransitionsReference, StateNode>();
 }
示例#4
0
 public override void Initialize(uFrame.IOC.UFrameContainer container)
 {
     container.AddItem <BindingsReference>();
     container.AddTypeItem <CommandsChildItem>();
     container.AddItem <TransitionsChildItem>();
     container.AddItem <HandlersReference>();
     container.AddTypeItem <PropertiesChildItem>();
     container.AddItem <SubPropertiesReference>();
     container.AddTypeItem <InstancesReference>();
     container.AddItem <StateTransitionsReference>();
     container.AddTypeItem <CollectionsChildItem>();
     Service = container.AddNode <ServiceNode, ServiceNodeViewModel, ServiceNodeDrawer>("Service");
     Service.Inheritable();
     Service.Color(NodeColor.Manganeseblue);
     Service.HasSubNode <SimpleClassNode>();
     ComputedProperty = container.AddNode <ComputedPropertyNode, ComputedPropertyNodeViewModel, ComputedPropertyNodeDrawer>("ComputedProperty");
     ComputedProperty.Inheritable();
     ComputedProperty.Color(NodeColor.Green);
     SimpleClass = container.AddNode <SimpleClassNode, SimpleClassNodeViewModel, SimpleClassNodeDrawer>("SimpleClass");
     SimpleClass.Inheritable();
     SimpleClass.Color(NodeColor.Salmon2);
     SubSystem = container.AddGraph <SubSystemGraph, SubSystemNode>("SubSystemGraph");
     SubSystem.Color(NodeColor.Blue);
     SubSystem.HasSubNode <ServiceNode>();
     SubSystem.HasSubNode <SimpleClassNode>();
     SubSystem.HasSubNode <ElementNode>();
     SubSystem.HasSubNode <CommandNode>();
     View = container.AddNode <ViewNode, ViewNodeViewModel, ViewNodeDrawer>("View");
     View.Inheritable();
     View.Color(NodeColor.Royalblue2);
     SceneType = container.AddNode <SceneTypeNode, SceneTypeNodeViewModel, SceneTypeNodeDrawer>("SceneType");
     SceneType.Inheritable();
     SceneType.Color(NodeColor.SgiBeet);
     Element = container.AddNode <ElementNode, ElementNodeViewModel, ElementNodeDrawer>("Element");
     Element.Inheritable();
     Element.Color(NodeColor.Violetred2);
     Element.HasSubNode <SimpleClassNode>();
     Element.HasSubNode <ViewNode>();
     Element.HasSubNode <CommandNode>();
     Element.HasSubNode <ComputedPropertyNode>();
     Element.HasSubNode <ViewComponentNode>();
     Element.HasSubNode <StateMachineNode>();
     Command = container.AddNode <CommandNode, CommandNodeViewModel, CommandNodeDrawer>("Command");
     Command.Inheritable();
     Command.Color(NodeColor.Indianred4);
     State = container.AddNode <StateNode, StateNodeViewModel, StateNodeDrawer>("State");
     State.Color(NodeColor.Lightgoldenrod3);
     MVVM = container.AddGraph <MVVMGraph, MVVMNode>("MVVMGraph");
     MVVM.Color(NodeColor.DarkGray);
     MVVM.HasSubNode <SimpleClassNode>();
     MVVM.HasSubNode <SubSystemNode>();
     MVVM.HasSubNode <SceneTypeNode>();
     MVVM.HasSubNode <ServiceNode>();
     ViewComponent = container.AddNode <ViewComponentNode, ViewComponentNodeViewModel, ViewComponentNodeDrawer>("ViewComponent");
     ViewComponent.Inheritable();
     ViewComponent.Color(NodeColor.SgiLightBlue);
     StateMachine = container.AddNode <StateMachineNode, StateMachineNodeViewModel, StateMachineNodeDrawer>("StateMachine");
     StateMachine.Inheritable();
     StateMachine.Color(NodeColor.Carrot);
     StateMachine.HasSubNode <StateNode>();
     container.Connectable <ComputedPropertyNode, TransitionsChildItem>();
     container.Connectable <ComputedPropertyNode, BindingsReference>();
     container.Connectable <ViewNode, ViewComponentNode>();
     container.Connectable <ViewNode, ViewNode>();
     container.Connectable <ElementNode, InstancesReference>();
     container.Connectable <ElementNode, Element>();
     container.Connectable <StartState, StateNode>();
     container.Connectable <CommandsChildItem, TransitionsChildItem>();
     container.Connectable <CommandsChildItem, BindingsReference>();
     container.Connectable <TransitionsChildItem, StateTransitionsReference>();
     container.Connectable <HandlersReference, SimpleClassNode>();
     container.Connectable <PropertiesChildItem, StateMachineNode>();
     container.Connectable <PropertiesChildItem, SubPropertiesReference>();
     container.Connectable <PropertiesChildItem, SceneProperties>();
     container.Connectable <PropertiesChildItem, BindingsReference>();
     container.Connectable <PropertiesChildItem, ComputedPropertyNode>();
     container.Connectable <StateTransitionsReference, StateNode>();
     container.Connectable <CollectionsChildItem, BindingsReference>();
     container.Connectable <PropertiesChildItem, BindingsReference>();
     container.Connectable <PropertiesChildItem, ComputedPropertyNode>();
     container.Connectable <PropertiesChildItem, SubPropertiesReference>();
     container.Connectable <PropertiesChildItem, BindingsReference>();
     container.Connectable <PropertiesChildItem, SceneProperties>();
     container.Connectable <PropertiesChildItem, StateMachineNode>();
     container.Connectable <CollectionsChildItem, BindingsReference>();
 }