【问题的提出】

 

在开发过程中我们经常会遇到将UI同学提供的效果图转化成实际的页面,而在这过程中,多数时候Blend等设计工具默认情况下并不能提供很好的可视化支持。

举个简单的例子来说下吧:

 
 

 
 

很简单的一个页面,里面longlistSelector Binding到了ViewModel的DataList上面DataList的定义如下:

 
 

 
 

非常简单的逻辑,那么我们在设计ItemTemplete的时候我们的设计器是如何显示的呢?

 
 

 
 

没有看错,多数情况下我们的页面除了标题以外都是漆黑一篇(这个例子里面连标题都没有=。=),因为此时并没有数据的加载(真实情况DataList的数据可能来自服务器)

 
 

下面我们的关键来了

 

【整点酷的!】

 

 如何能让设计器设计的时候有Demo数据显示呢?

 

先看代码随后来解释:

 
 

 
 

我们在构造函数中做了一个判断,判断了下IsInDesignTool属性,这个属性的作用是个啥呢?可能你已经想到了(相信你没有=。=)

 

我们需要从根本说起:

 

考虑一个问题,Blend或者VS的可视化设计器里面为什么会显示出来UI呢?

答案是,Blend或者VS的可视化设计器会跑我们的代码,然后来显示出来,当我们Build之后,设计器会进入页面的构造函数,调用InitializeComponent();方法来将UI渲染然后呈现给我们。

 
 

回到主题,上面IsInDesignTool属性就是来标识当前这段代码的执行者是否为设计器(这个属性在运行时始终为False)

如此我们这个ViewModel的意思就很明显了,当设计器跑这段代码的时候,我们就伪造一组数据给它。

 
 

下面一个问题就来了,ViewModel在运行时被设置到Page上面,那设计器又如何才能跑到ViewModel的构造函数中呢?

我们添加如下代码到Xaml中:

 
 

 
 

注意d:DataContext属性,他的作用就是告诉设计器:LayoutRoot在设计器执行代码的时候DataContext是MainPageViewModel,这个ViewModel应该在设计时创建。

如此我们的障眼法就成功了,设计器跑起来代码之后,傻乎乎的去创建MainPageViewModel,在构造的时候又傻乎乎的拿到了一组假数据=。=

 
 

于是就出现了下面的显示效果:

 

 
 

Bingo!

 
 

上面这个技巧对于开发人员可以带来效率上的飞升,至少我发现了这一点之后,省了很多布局时间,:-)

 
 

如需要详细Demo工程欢迎留言,或者加入

QQ群:182659848

Windows Phone 提升开发效率(一)使用d:DataContext添加设计时Binding的更多相关文章

  1. atitit.提升开发效率---使用服务器控件生命周期 asp.net 11个阶段 java jsf 的6个阶段比较

    atitit.提升开发效率---使用服务器控件生命周期  asp.net 11个阶段  java jsf 的6个阶段比较 如下列举了服务器控件生命周期所要经历的11个阶段. (1)初始化-- --在此 ...

  2. Atitit. 提升开发效率与质量DSL ( 3) ----实现DSL的方式总结

    Atitit. 提升开发效率与质量DSL ( 3) ----实现DSL的方式总结 1. 管道抽象 1 2. 层次结构抽象(json,xml etc) 1 3. 异步抽象promise 1 4. Ide ...

  3. atitit.提升开发效率---MDA 软件开发方式的革命(3)----自动化建表

    atitit.提升开发效率---MDA 软件开发方式的革命(3)----自动化建表 1. 建模在后自动建表 1 1. 传统上,需要首先建表,在业务编码.. 1 2. 模型驱动建表---更多简化法是在建 ...

  4. atitit.提升开发效率---mda 软件开发方式的革命--(2)

    atitit.提升开发效率---mda 软件开发方式的革命--(2) 1. 一个完整的MDA规范包含: 1 2. 一个完整的MDA应用程序包含: 1 3. MDA能够带来的最大的三个好处是什么? 2 ...

  5. atitit.提升开发效率---mda 软件开发方式的革命

    atitit.提升开发效率---mda 软件开发方式的革命 1. 软件开发方式的革命开发工具的抽象层次将再次提升 1 2. 应用框架和其实现相分离 2 3. 目前的问题模型和代码不同步 2 4. MD ...

  6. atitit.提升开发效率---动态语言总结

    atitit.提升开发效率---动态语言总结 ruby,python 都不错,就是语法不好, 应用不广泛,文档,工具都非常少,不推荐... php狠不错,就是高级特性不行.. 看来子有.net/jav ...

  7. Atitit 项目管理 提升开发效率的项目流程方法模型 哑铃型  橄榄型 直板型

    Atitit 项目管理 提升开发效率的项目流程方法模型 哑铃型  橄榄型 直板型 项目主体三个部分 ui界面,中间层,数据库 按照不同的比重可以分为一下三个模型  哑铃型  橄榄型 直板型 哑铃型 开 ...

  8. 【Unity】4.2 提升开发效率的捷径--导入 Unity 5.3.4 自带的资源包

    分类:Unity.C#.VS2015 创建日期:2016-04-06 一.简介 Unity自带的资源包也称为标准资源包.换言之,Unity自带的所有标准资源包导入到Unity项目中以后,都会放在Pro ...

  9. atitit.提升开发效率---MDA 软件开发方式的革命(3)----自己主动化建表

    atitit.提升开发效率---MDA 软件开发方式的革命(3)----自己主动化建表 1. 建模在后自己主动建表 1 1. 传统上,须要首先建表,在业务编码.. 1 2. 模型驱动建表---很多其它 ...

随机推荐

  1. 【Python】《大话设计模式》Python版代码实现

    <大话设计模式>Python版代码实现 上一周把<大话设计模式>看完了,对面向对象技术有了新的理解,对于一个在C下写代码比较多.偶尔会用到一些脚本语言写脚本的人来说,很是开阔眼 ...

  2. [C++基础]那些容易被混淆的概念:函数/数组指针-指针函数/数组,类/函数模板-模板类/函数

    函数指针-指针函数 函数指针的重点是指针.表示的是一个指针,它指向的是一个函数.eg: int (*pf)(); 指针函数的重点是函数.表示的是一个函数,它的返回值是指针.eg: int* fun() ...

  3. .NET-使用NPOI组件将数据导出Excel-通用方法

    一.Excel导入及导出问题产生: 从接触.net到现在一直在维护一个DataTable导出到Excel的类,时不时还会维护一个导入类.以下是时不时就会出现的问题:导出问题: 如果是asp.net,你 ...

  4. C# 使用int.TryParse,Convert.ToInt32,(int)将浮点类型转换整数时的区别

    int.TryParse,Convert.ToInt32,(int) 这几种类型在将浮点类型转换整数时是有差别 Convert.ToInt32则会进行四舍五入 int.TryParse只能转换整数,即 ...

  5. FileItem 出现部分中文乱码解决办法

    首先要进行两处的修改: 第一:如果你使用了上传文件的包, 如:ServletFileUpload sfu = new ServletFileUpload(factory); sfu.setHeader ...

  6. MESI-CPU缓存一致性协议

    转http://blog.csdn.net/realxie/article/details/7317630 http://en.wikipedia.org/wiki/MESI_protocol MES ...

  7. UITextView 添加 pleaceholder

    UITextView 默认没有 pleaceholder属性: 我们可以通过多种方式添加 在UITextView的代理方法中写 - (void)textViewDidBeginEditing:(UIT ...

  8. Spring整合JDBC实现简单的增删改

    Spring整合JDBC实现简单的增删改: 1.导入Spring的包和数据库的驱动包: 2.选择一个数据源(dbcp和C3P0) 3.导入数据源的包(这里我们使用dbcp) <span styl ...

  9. Android日常开发总结

    全部Activity可继承自BaseActivity,便于统一风格与处理公共事件,构建对话框统一构建器的建立,万一需要整体变动,一处修改到处有效. 数据库表段字段常量和SQL逻辑分离,更清晰,建议使用 ...

  10. webpack CommonsChunkPlugin 提取公共代码

    1.项目结构 2.部分代码 module.js console.log('module.js'); index文件夹下的index.js require('../module.js'); consol ...