Пример #1
0
        public void InitEventWatcher()
        {
            var rBoundEvent = DataBindingTypeResolve.MakeViewDataBindingEvent(this.gameObject, this.EventPath);

            if (rBoundEvent != null)
            {
                this.mUnityEventWatcher = new UnityEventWatcher(rBoundEvent.Component, rBoundEvent.Name, this.SyncFromView);
            }
            else
            {
                Debug.LogErrorFormat("Can not parse bound event: {0}.", this.EventPath);
            }
        }
Пример #2
0
        public void InitEventWatcher(Action <EventArg> rAction)
        {
            var rBoundEvent = DataBindingTypeResolve.MakeViewDataBindingEvent(this.gameObject, this.ViewEvent);

            if (rBoundEvent != null)
            {
                this.mUnityEventWatcher = new UnityEventWatcher(rBoundEvent.Component, rBoundEvent.Name, rAction);
            }
            else
            {
                Debug.LogErrorFormat("Can not parse bound event: {0}.", this.ViewEvent);
            }
        }
Пример #3
0
        public override void GetPaths()
        {
            base.GetPaths();

            var rViewModelProps = new List <BindableMember <PropertyInfo> >(
                DataBindingTypeResolve.GetListViewModelProperties(this.gameObject));

            this.ModelPaths = DataBindingTypeResolve.GetAllViewModelPaths(rViewModelProps).ToArray();

            if (string.IsNullOrEmpty(this.ViewModelPath))
            {
                this.ViewModelPath = this.ModelPaths.Length > 0 ? this.ModelPaths[0] : "";
            }
        }
Пример #4
0
        /// <summary>
        /// ViewModel和View之间的数据绑定
        /// </summary>
        private void BindingViewAndViewModels(ViewModelContainer rViewModelContainer)
        {
            var rAllMemberBindings = UtilTool.GetComponentsInChildrenUtilOrigin <MemberBindingAbstract>(rViewModelContainer);

            for (int i = 0; i < rAllMemberBindings.Count; i++)
            {
                var rMemberBinding = rAllMemberBindings[i];
                if (rMemberBinding.IsListTemplate)
                {
                    continue;                                   // 过滤掉ListTemplate标记得Binding Script
                }
                rMemberBinding.ViewProp = DataBindingTypeResolve.MakeViewDataBindingProperty(rMemberBinding.gameObject, rMemberBinding.ViewPath);
                if (rMemberBinding.ViewProp == null)
                {
                    Debug.LogErrorFormat("View Path: {0} error..", rMemberBinding.ViewPath);
                    return;
                }

                rMemberBinding.ViewModelProp = GameDataBindingTypeResolve.MakeViewModelDataBindingProperty(rMemberBinding.ViewModelPath);
                if (rMemberBinding.ViewModelProp == null)
                {
                    Debug.LogErrorFormat("View Model Path: {0}, {1} error..", rMemberBinding.ViewModelPath, rMemberBinding);
                    return;
                }
                ViewModel rViewModel = this.GetViewModel(rMemberBinding.ViewModelProp.PropertyOwnerKey);
                if (rViewModel == null)
                {
                    Debug.LogErrorFormat("View Model: {0} error..", rMemberBinding.ViewModelPath);
                    return;
                }

                rMemberBinding.ViewModelProp.PropertyOwner = rViewModel;
                rMemberBinding.SyncFromViewModel();

                // ViewModel绑定View
                rMemberBinding.ViewModelPropertyWatcher = new DataBindingPropertyWatcher(rViewModel, rMemberBinding.ViewModelProp.PropertyName, () =>
                {
                    rMemberBinding.SyncFromViewModel();
                });
                rViewModel.PropChangedHandler += rMemberBinding.ViewModelPropertyWatcher.PropertyChanged;

                // View绑定ViewModel
                var rMemberBindingTwoWay = rMemberBinding as MemberBindingTwoWay;
                if (rMemberBindingTwoWay != null)
                {
                    rMemberBindingTwoWay.InitEventWatcher();
                }
            }
        }
Пример #5
0
        private void OnListViewFillCellFunc(Transform rTrans, int nIndex, IList rListObj)
        {
            if (rListObj == null || nIndex >= rListObj.Count)
            {
                return;
            }

            var rListItem = rListObj[nIndex] as ViewModel;

            if (rListItem == null)
            {
                return;
            }

            var rAllEventBindings = rTrans.GetComponentsInChildren <EventBinding>(true);

            for (int i = 0; i < rAllEventBindings.Length; i++)
            {
                var rEventBinding = rAllEventBindings[i];
                if (!rEventBinding.IsListTemplate)
                {
                    continue;
                }
                rEventBinding.OnDestroy();
                var bResult = GameDataBindingTypeResolve.MakeListViewModelDataBindingEvent(this, rEventBinding, nIndex);
                if (!bResult)
                {
                    Debug.LogErrorFormat("Make view model binding event {0} failed..", rEventBinding.ViewModelMethod);
                }
            }

            // 清除已有的事件监听
            rListItem.PropChangedHandler = null;

            var rAllMemberBindings = rTrans.GetComponentsInChildren <MemberBindingAbstract>(true);

            for (int i = 0; i < rAllMemberBindings.Length; i++)
            {
                var rMemberBinding = rAllMemberBindings[i];
                if (!rMemberBinding.IsListTemplate)
                {
                    continue;                                    // 过滤掉非ListTemplate标记的Binding Script
                }
                if (rMemberBinding.ViewProp == null)
                {
                    rMemberBinding.ViewProp = DataBindingTypeResolve.MakeViewDataBindingProperty(rMemberBinding.gameObject, rMemberBinding.ViewPath);
                }
                if (rMemberBinding.ViewProp == null)
                {
                    Debug.LogErrorFormat("List template View Path: {0} error..", rMemberBinding.ViewPath);
                    return;
                }

                if (rMemberBinding.ViewModelProp == null)
                {
                    rMemberBinding.ViewModelProp = GameDataBindingTypeResolve.MakeViewModelDataBindingProperty(rMemberBinding.ViewModelPath);
                    if (rMemberBinding.ViewModelProp == null)
                    {
                        Debug.LogErrorFormat("View Model Path: {0} error..", rMemberBinding.ViewModelPath);
                        return;
                    }
                }

                rMemberBinding.ViewModelProp.PropertyOwner = rListItem;
                rMemberBinding.SyncFromViewModel();

                if (rListItem != null)
                {
                    // ViewModel绑定View
                    rMemberBinding.ViewModelPropertyWatcher = new DataBindingPropertyWatcher(rListItem, rMemberBinding.ViewModelProp.PropertyName, () =>
                    {
                        rMemberBinding.SyncFromViewModel();
                    });
                    rListItem.PropChangedHandler += rMemberBinding.ViewModelPropertyWatcher.PropertyChanged;
                }
            }
        }
Пример #6
0
 public void GetAllViewModelDataSources()
 {
     this.ViewModels       = new List <ViewModelDataSource>(this.GetComponentsInChildren <ViewModelDataSource>(true));
     this.EventBindings    = new List <EventBinding>(this.GetComponentsInChildren <EventBinding>(true));
     this.ViewModelClasses = DataBindingTypeResolve.GetAllViews().ToArray();
 }
Пример #7
0
 public virtual void GetPaths()
 {
     this.TemplateViewModels = DataBindingTypeResolve.GetAllViewModels().ToArray();
 }
Пример #8
0
        public UnityEventWatcher(Component rComp, string rEventName, Action <EventArg> rAction)
        {
            var rBindableEvent = DataBindingTypeResolve.GetBoundEvent(rEventName, rComp);

            this.mUnityEventBinder = UnityEventBinderFactory.Create(rBindableEvent?.UnityEvent, rAction);
        }
Пример #9
0
 public void GetPaths()
 {
     this.ViewModelClasses = DataBindingTypeResolve.GetAllViewModels().ToArray();
 }