/// <summary> /// ListViewModel和View之间的数据绑定 /// </summary> private void BindingListViewAndViewModels(ViewModelContainer rViewModelContainer) { var rViewModelDataSources = UtilTool.GetComponentsInChildrenUtilOrigin <ViewModelDataSourceList>(rViewModelContainer); for (int i = 0; i < rViewModelDataSources.Count; i++) { var rViewModelDataSource = rViewModelDataSources[i]; rViewModelDataSource.ViewModelProp = GameDataBindingTypeResolve.MakeViewModelDataBindingProperty(rViewModelDataSource.ViewModelPath); if (rViewModelDataSource.ViewModelProp == null) { Debug.LogErrorFormat("View Model Path: {0} error..", rViewModelDataSource.ViewModelPath); return; } ViewModel rViewModel = this.GetViewModel(rViewModelDataSource.ViewModelProp.PropertyOwnerKey); if (rViewModel == null) { Debug.LogErrorFormat("View Model: {0} error..", rViewModelDataSource.ViewModelPath); return; } rViewModelDataSource.ViewModelProp.PropertyOwner = rViewModel; // 绑定Watcher rViewModelDataSource.ViewModelPropertyWatcher = new DataBindingPropertyWatcher(rViewModel, rViewModelDataSource.ViewModelProp.PropertyName, () => { // 重新设置List数据时候,改变个数 this.BindingList(rViewModelDataSource); }); rViewModel.PropChangedHandler += rViewModelDataSource.ViewModelPropertyWatcher.PropertyChanged; // 初始化list this.BindingList(rViewModelDataSource); } }
/// <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(); } } }
public void DataBindingDisconnect(ViewControllerContainer rViewControllerContainer) { if (!rViewControllerContainer) { return; } var rAllMemberBindings = rViewControllerContainer.gameObject.GetComponentsInChildren <MemberBindingAbstract>(true); for (int i = 0; i < rAllMemberBindings.Length; i++) { var rMemberBinding = rAllMemberBindings[i]; if (rMemberBinding.ViewModelProp == null) { continue; } ViewModel rViewModel = rMemberBinding.ViewModelProp.PropertyOwner as ViewModel; if (rViewModel != null) { if (rMemberBinding) { rViewModel.PropChangedHandler -= rMemberBinding.ViewModelPropertyWatcher.PropertyChanged; } } if (rMemberBinding) { rMemberBinding.OnDestroy(); } } var rListViewModelDataSources = UtilTool.GetComponentsInChildrenUtilOrigin <ViewModelDataSourceList>(rViewControllerContainer); for (int i = 0; i < rListViewModelDataSources.Count; i++) { var rViewModelDataSource = rListViewModelDataSources[i]; ViewModel rViewModel = rViewModelDataSource.ViewModelProp.PropertyOwner as ViewModel; if (rViewModel != null) { rViewModel.PropChangedHandler -= rViewModelDataSource.ViewModelPropertyWatcher.PropertyChanged; } } var rTabViewModelDataSources = rViewControllerContainer.gameObject.GetComponentsInChildren <ViewModelDataSourceTab>(true); for (int i = 0; i < rTabViewModelDataSources.Length; i++) { var rViewModelDataSource = rTabViewModelDataSources[i]; ViewModel rViewModel = rViewModelDataSource.ViewModelProp.PropertyOwner as ViewModel; if (rViewModel != null) { rViewModel.PropChangedHandler -= rViewModelDataSource.ViewModelPropertyWatcher.PropertyChanged; } } var rArrayViewModelDataSources = rViewControllerContainer.gameObject.GetComponentsInChildren <ViewModelDataSourceArray>(true); for (int i = 0; i < rArrayViewModelDataSources.Length; i++) { var rViewModelDataSource = rArrayViewModelDataSources[i]; ViewModel rViewModel = rViewModelDataSource.ViewModelProp.PropertyOwner as ViewModel; if (rViewModel != null) { rViewModel.PropChangedHandler -= rViewModelDataSource.ViewModelPropertyWatcher.PropertyChanged; } } var rAllEventBindings = rViewControllerContainer.gameObject.GetComponentsInChildren <EventBinding>(true); for (int i = 0; i < rAllEventBindings.Length; i++) { rAllEventBindings[i].OnDestroy(); } }