当前位置: 首页 > news >正文

芜湖网站推广企业网站建设一般包含哪些内容

芜湖网站推广,企业网站建设一般包含哪些内容,网站建设技术方面的论文,松山湖网站建设MVVM回顾 经过上一篇文章的介绍#xff0c;相信你对MVVM的设计思想有所了解。MVVM的核心思想就是解耦#xff0c;View与ViewModel应该感受不到彼此的存在。 View只关心怎样渲染#xff0c;而ViewModel只关心怎么处理逻辑#xff0c;整个架构由数据进行驱动。不仅View与View…MVVM回顾 经过上一篇文章的介绍相信你对MVVM的设计思想有所了解。MVVM的核心思想就是解耦View与ViewModel应该感受不到彼此的存在。 View只关心怎样渲染而ViewModel只关心怎么处理逻辑整个架构由数据进行驱动。不仅View与ViewModel彼此解耦ViewModel与ViewModel之间也是解耦的。 通过消息订阅-发布机制解决了ViewModel之间的强依赖关系。 先回顾一下我们已完成的功能Framework中最核心就是BindableProperty 类ViewModel 中所有需要被绑定到UI 控件的属性必须是一个BindableProperty 对象。它是一个职责非常单一的类监听Value的数值是否发生变化当变化时触发OnValueChanged 事件通知View 做出相应的更新。 public class BindablePropertyT {public delegate void ValueChangedHandler(T oldValue, T newValue);public ValueChangedHandler OnValueChanged;private T _value;public T Value{get{return _value;}set{if (!object.Equals(_value, value)){T old _value;_value value;ValueChanged(old, _value);}}}private void ValueChanged(T oldValue, T newValue){if (OnValueChanged ! null){OnValueChanged(oldValue, newValue);}} } 那问题来了View在何时并以怎样的方式去监听这些属性的变化呢 BindableProperty是一个很好的设计它不仅可以用在ViewModel中还可以用在View中用它来修饰 ViewModel当ViewModel 改变时比如初始化时或者从一个ViewModel变化到另一个ViewModel对象时在触发的OnBindingContextChanged 事件中实现对ViewModel中的属性监听。如下定义的抽象父类UnityGuiView public readonly BindablePropertyViewModel ViewModelProperty new BindablePropertyViewModel(); public ViewModel BindingContext {get { return ViewModelProperty.Value; }set { ViewModelProperty.Value value; } }protected virtual void OnBindingContextChanged(ViewModel oldViewModel, ViewModel newViewModel) { }public UnityGuiView() {this.ViewModelProperty.OnValueChanged OnBindingContextChanged; } 子类SetupView继承自UnityGuiView并且Override OnBindingContextChanged并实现对ViewModel中的属性监听。 protected override void OnBindingContextChanged(ViewModel oldViewModel, ViewModel newViewModel) {base.OnBindingContextChanged(oldViewModel, newViewModel);SetupViewModel oldVm oldViewModel as SetupViewModel;if (oldVm ! null){oldVm.Name.OnValueChanged - NameValueChanged;...}if (ViewModel!null){ViewModel.Name.OnValueChanged NameValueChanged;...} } 进一步抽象 实际上对于ViewModel而言会有非常多的BindableProperty需要被绑定到UI控件中从代码的可读性而言如下代码是非常沉长和啰嗦的 if (oldVm ! null) {oldVm.Name.OnValueChanged - NameValueChanged;... } if (ViewModel!null) {ViewModel.Name.OnValueChanged NameValueChanged;... } 因为和-是成对出现的所以只要是看到 OnValueChanged这部份代码的长度几乎都是*2。 仔细观察一下每个View都会出现 具体的 ViewModel.属性.OnValueChanged事件或者-具体的处理函数 这样的固定模板。 那么是否可以将这部分代码抽象到一个公共类中呢并且暴露出一个简单的方法提供给View来初始化这些OnValueChanged事件比如 PropertyBindingUtils.Initstring(Color,OnColorPropertyValueChanged); 然后在Init方法中或者-具体的处理函数。 当然是可以得定义一个PropertyBinder属性绑定器通过反射技术动态为属性或者- OnValueChanged 事件脑海里的 Raw 代码如下 InitTProperty(string propertyName ,OnValueChanged valueChangedHandler) {var fieldInfo typeof(TViewModel).GetField(propertyName, BindingFlags.Instance | BindingFlags.Public);var value fieldInfo.GetValue(viewModel);BindablePropertyTProperty bindableProperty value as BindablePropertyTProperty;bindableProperty.OnValueChanged valueChangedHandler;bindableProperty.OnValueChanged - valueChangedHandler; } 最核心的代码就那么几步详细代码可以查看源代码PropertyBinder的实现。 重构视图基类UnityGuiView 想象一下PropertyBinder应该放在哪儿。 它是用来监听ViewModel中的属性值变化的用来替换沉长的 oldVm.Property.OnValueChanged 和- NameValueChanged理所应当应该放在View中因为每个View都需要故将它定义在UnityGuiView 中。 又因为PropertyBinder需要知道为哪个ViewModel进行服务因为需要反射故通过泛型来约束 UnityGuiView T :IView where T:ViewModelBase 。 再对BindingContext稍作改变当它被赋值时只初始化一次对OnValueChanged事件的监听原先是放在构造函数里。 public readonly BindablePropertyViewModelBase ViewModelProperty new BindablePropertyViewModelBase(); public ViewModelBase BindingContext {get { return ViewModelProperty.Value; }set{if (!_isBindingContextInitialized){OnInitialize();_isBindingContextInitialized true;}//触发OnValueChanged事件ViewModelProperty.Value value;} } /// summary /// 初始化View当BindingContext改变时执行 /// /summary protected virtual void OnInitialize() {//无所ViewModel的Value怎样变化只对OnValueChanged事件监听(绑定)一次ViewModelProperty.OnValueChanged OnBindingContextChanged; } 值得注意的事我定义了一个virtual的OnInitialize这样子类可以override它从而实现一些初始化方法比如 protected override void OnInitialize() {base.OnInitialize();Binder.Addstring(Color,OnColorPropertyValueChanged); }private void OnColorPropertyValueChanged(string oldValue, string newValue) {switch (newValue){case Red:buttonImage.color Color.red;break;case Yellow:buttonImage.color Color.yellow;break;default:break;} } 小节 这篇博客基本上是回顾了MVVM模式在Unity 3D上的实践结合自己的开发经验通过反射的技术可以有效减少沉长的代码。 源代码托管在Github上点击此了解 转载于:https://www.cnblogs.com/OceanEyes/p/unity3d_framework_designing_get_started_with_mvvm_part2.html
http://www.pierceye.com/news/197103/

相关文章:

  • 南开大学 网站开发技术 刘冲网站排名优化有哪些牛霸天的软件1
  • 高品质网站设计北京市地铁建设管理公司网站
  • 初次建设网站的技巧织梦做分类信息网站
  • 宣讲家网站官网加强作风建设网站业务怎么做的
  • 厚街网站建设价格做办公室的网站
  • 青海做网站找谁wordpress gif缩略图
  • 手机网站全屏显示如何把自己做的网站放到微信上
  • 网站建设云雅淇wordpress
  • 工作室网站需要备案吗python基础教程编程题
  • 建设工程人才招聘信息网站响应式网站 cms
  • 设计签名免费网站福州的网站建设
  • 太原这边有做网站的吗wordpress实现pdf浏览
  • 制作微信公众号的网站开发30岁做网站运营
  • 松江手机网站开发正规免费代理
  • 太原市建设路小学网站昆山住房与城乡建设局网站
  • 石家庄的网站的公司计算机应用技术专业网站开发方向
  • 网站优化软件排行榜八年级微机网站怎么做
  • 织梦网站漏洞cms网站开发流程
  • 网站开发规划书怎么写企业cms开源
  • html网站免费下载海珠区建网站
  • 石家庄住房城乡建设厅网站宿迁网站建设推广公司
  • 广州模板网站建设费用2024新闻热点摘抄
  • 河北秦皇岛建设局网站做网站简单的软件
  • 上海网站开发外包公司最新新闻热点事件短篇
  • wordpress实现网站勋章功能网站建设需要什么资质
  • 河北沙河市建设局网站威海好的网站建设公司
  • 网站建设怎么放到云空间上海企业网站模板
  • 设计和建设企业网站心得和体会wordpress和新浪微博同步
  • 网站底部横条导航代码制造业erp系统软件有哪些
  • 网站建设公司antnw企业营销型网站制作