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