示例#1
0
        protected virtual void Bind(int index, GameObject instance, IViewModel vm)
        {
            var view = instance.GetComponent <IView>();

            view.Prepare();
            view.Attach(vm);

            if (!instance.activeSelf && !m_DisableAutoActive)
            {
                instance.SetActive(true);
            }

            using (var elementsScope = ViewUtil.UseElementList())
            {
                var elements = elementsScope.List;
                view.GetElements(elements);
                foreach (var elm in elements)
                {
                    if (elm is IViewEvent viewEvent)
                    {
                        var argument = viewEvent.GetArgument();
                        if (argument != null && argument is CollectionIndexArgument target)
                        {
                            target.Index = index;
                        }
                    }
                }
            }
        }
示例#2
0
 public void Bind(IViewModel model)
 {
     if (m_Disposed)
     {
         return;
     }
     m_ViewModels.Add(model);
     using (var scope = ViewUtil.UseBindingPropertyListStack())
     {
         foreach (var prop in model.Property.GetAll(scope.List))
         {
             Bind(prop.Path, prop);
         }
     }
     model.Property.OnNewProperty += Bind;
 }
示例#3
0
        public void Prepare(bool force = false)
        {
            if (m_Prepare && !force)
            {
                return;
            }
            m_Prepare = true;

            using (var elementsScope = ViewUtil.UseElementList())
            {
                var elements = elementsScope.List;
                GetComponentsInChildren(true, elements);
                if (m_LightBinds != null)
                {
                    foreach (var lightBind in m_LightBinds)
                    {
                        elements.Add(lightBind.Resolve());
                    }
                }
                using (var viewListScope = ViewUtil.UseViewList())
                {
                    var viewList = viewListScope.List;
                    GetComponentsInChildren(true, viewList);
                    foreach (var view in viewList)
                    {
                        var viewComponent = view as View;
                        if (viewComponent == this)
                        {
                            continue;
                        }
                        view.Prepare();
                        using (var childElementsScope = ViewUtil.UseElementList())
                        {
                            var childElements = childElementsScope.List;
                            view.GetElements(childElements);
                            foreach (var remove in childElements)
                            {
                                elements.Remove(remove);
                            }
                        }
                    }
                }
                m_Elements = elements.ToArray();
            }
        }