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; } } } } }
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(); } }