首页 > 代码库 > Unity uFrame 1.6 MVVM 学习笔记(一)
Unity uFrame 1.6 MVVM 学习笔记(一)
未写完......
Sub System
生成一个类:
1.UISysLoader
可重写方法:
Load
属性,方法:
this.EventAggregator 事件聚合器(虽然有些类也有该方法,看源码好像有些不一样,待检验异同)
this.Container 怀疑是集合类型的容器,即集合的父节点,待检验
this.CreateViewModel 怀疑是创建一个ViewModel。
this.GetView 得到参数下的ViewBase类
this.GetViewModel 内部通过GetView方法得到View,再取得View下的ViewModelObject属性
Scene Type:
生成三个类:
1.MainScene
可重写方法执行顺序:
Start,KernelLoading,KernelLoaded,OnDestroy
属性,方法:
this.DefaultKernelScene 内核场景的名字
this.EventAggregator 事件聚合器
this.OnEvent Wait for an Event to occur on the global event aggregator
this.Publish Publishes a command to the event aggregator. Publish the class data you want, and let any "OnEvent" subscriptions handle them.
this.Settings 对应生成的MainSceneSettings类,不知是否只能通过this.Settings = new MainSceneSettings();来赋值
this._SettingsObject 作为this.Settings的内部赋值变量
2.MainSceneLoader
可重写方法执行顺序:
Start,KernelLoading,KernelLoaded,LoadScene,UnloadScene,OnDestroy
属性,方法:
this.EventAggregator 事件聚合器
this.OnEvent Wait for an Event to occur on the global event aggregator
this.Publish Publishes a command to the event aggregator. Publish the class data you want, and let any "OnEvent" subscriptions handle them.
this.SceneType 暂时未知有什么作用。
3.MainSceneSettings
Element
生成两个类:
1.LoginSceneViewModel
可重写方法执行顺序:
Bind,FillProperties,FillCommands
未知:
ExecuteLogin,MethodAccessException,,Read,Unbind,WireCommands,Write
属性,方法:
太多,日后挑重要写。
this.SetupBindings() This method will ensure that a view-model exists and then call the bind method when it‘s appropriate.设置重新绑定,但要在合适的时机调用,比如在AfterBind()里调用会卡死。
API解释:
OnPropertyChanged 当ViewModel中的属性更改时触发该方法。如果View有绑定属性改变事件,该事件先于OnPropertyChanged执行。
Write,Read 主要负责数据序列化与反序列化的工作
2.LoginSceneController
可重写方法执行顺序:
Setup,SetupAsync,Create,CreateEmpty,InitializeLoginScene,Initialize
未知:CreateLoginScene,DisposingViewModel,Dispose
条件顺序:Login,LoginHandler(触发对应的事件一起执行)
属性,方法:
this.Container 怀疑是集合类型的容器,即集合的父节点,待检验
this.EventAggregator 事件聚合器
this.OnEvent Wait for an Event to occur on the global event aggregator
this.Publish Publishes a command to the event aggregator. Publish the class data you want, and let any "OnEvent" subscriptions handle them.
this.LoginSceneViewModelManager 暂时故名思意,即ViewModel管理者,看了源码,主要有添加/删除ViewModel的功能。主要是相关联的ViewModel的管理类属性
this.LoginSceneViewModels 暂时故名思意,即ViewModels,看了源码,从LoginSceneViewModelManager取得
this.ObserveEveryValueChanged Publish target property when value is changed. If source is destroyed/destructed, publish OnCompleted.
备注:
1.在Commands里写的方法会在Controller里重写两个方法,一个Login,LoginHandler(后执行),但LoginHandler参数command.sender是对应的ViewModel,因此猜测这个方法主要用来执行完Login后的一些处理。
View(必须连一个Element)
生成一个类:
1.LoginView
可重写方法执行顺序:
OnEnable,Start,Update,SetIdentifierSilently,PreBind,Bind,AfterBind,KernelLoading,KernelLoaded,OnDisable,DisposeBindings,Unbind,OnDestroy
未知:InitializeViewModel(在面板点击InitializeViewModel才会执行),ExecuteLogin,Write,Read
属性,方法:
太多,日后挑重要写。主要是一些绑定处理。
API解释:
1.ExecuteLogin对应Controller的Login和LoginHandler方法,也就是说View可以直接执行Controller的方法?
备注:
1.View的一些执行比内核快(例如Update),也比uFrame场景加载快(为什么这么设计?),或者这就是在View里直接使用ViewModel会报空指针的原因
View里直接使用ViewModel要在Bind后使用,因为Update比Bind先执行
2.Controller的Step和SetupAsync执行比较早
3.在MainSceneLoader的OnDestory前最好执行一遍UnloadScene,因为怀疑他没有卸载场景。
4.坑点:因为Service里不能直接注入不是Instance的是ViewModel,因此我把一个ViewModel在uFrame设计中设置为了Instances.
但是在Service中注入使用时发现没有同步View面板InitializeViewModel自己初始化的数据。
需要在面板InitializeViewModel上点击Use Rigistered ...才可以同步。那这个Use Rigistered到底是什么?
在这里大胆猜测是创建一个实例给其他地方通过引用来使用。否则就是创建多个实例。
Unity uFrame 1.6 MVVM 学习笔记(一)