我已经使用WPF完成了一个完整的项目,并且(至少)非常好地掌握了主要概念,如XAML,Databinding和MVVM。我们“手工”完成了所有工作 - 我们没有使用MVVM框架或第三方工具。所有XAML都是手工编写的(没有Blend)。
我将在几周后开始的新项目是相当重型的Silverlight,我希望尽快加快速度。然而,我在开始使用SL时所阅读的大部分文章都集中在XAML和数据绑定上。由于我对这些概念的介绍在我的记忆中仍然非常新鲜,我当然可以理解为什么这些教程会花费大量时间在这些主题上 - 学习曲线可能非常陡峭。然而,这些是我已经熟悉的概念,并且发现自己不得不涉足许多有限的领域,以学习任何新的和令人信服的东西。
因此,我正在寻找的是关于我需要学习和理解的建议,从成为一名熟练的WPF'er到熟练的Silverlight'er。这可以是以下形式:
- 一般建议
- 主要差异
- 经验法则
- 资源/链接(“WPFer指南”
Silverlight“会很完美:)
- 主要陷阱/需要注意的事项
提前感谢您的任何见解。
Rob Eisenberg(创作者) 卡利 和 Caliburn Micro)有一系列博客文章,讨论将WPF应用程序移植到Silverlight。这可能会让您对一些框架差异有所了解。
第1天
http://devlicio.us/blogs/rob_eisenberg/archive/2010/03/25/porting-nhprof-from-wpf-to-silverlight-day-1.aspx
第2天 http://devlicio.us/blogs/rob_eisenberg/archive/2010/03/29/porting-nhprof-from-wpf-to-silverlight-day-2.aspx
第3天 http://devlicio.us/blogs/rob_eisenberg/archive/2010/03/31/porting-nhprof-from-wpf-to-silverlight-day-3.aspx
第4天 http://devlicio.us/blogs/rob_eisenberg/archive/2010/04/01/porting-nhprof-from-wpf-to-silverlight-day-4.aspx
第5天 http://devlicio.us/blogs/rob_eisenberg/archive/2010/04/02/porting-nhprof-from-wpf-to-silverlight-day-5.aspx
第6天 http://devlicio.us/blogs/rob_eisenberg/archive/2010/04/02/porting-nhprof-from-wpf-to-silverlight-day-6.aspx
第7天 http://devlicio.us/blogs/rob_eisenberg/archive/2010/04/02/porting-nhprof-from-wpf-to-silverlight-day-7.aspx
第8天 http://devlicio.us/blogs/rob_eisenberg/archive/2010/04/02/porting-nhprof-from-wpf-to-silverlight-day-8.aspx
还有一些其他的想法:
- 绑定默认为单向
- 没有DynamicResource
- TabControl是完全不同的
- 无法为类型定义隐式DataTemplates
- 依赖属性中没有CoerceValue
- 事件路由非常基础
- 没有内置的命令结构。你有ICommand接口,而ButtonBase控件有一个Command属性,虽然没有实现ICommand接口的类。
- 缺少x:静态,x:类型
- 所有服务调用都需要位于与UI线程不同的线程上。这基本上要求您学习/实现异步编程策略。看到 这里 和 这里。
- 如前所述,它是一个不同的框架,因此并非所有库都可供您使用。示例:没有XmlDocument - 您必须使用XElement(这可以说更好,尽管如此)
- 导航框架与WPF完全不同。远离它。它只会让你痛苦。 ]
- 你可以在WPF的核心框架中找到的几个控件 Silverlight工具包。下载它,你需要它。
- 没有内置触发器,但可以使用Blend SDK中提供的行为/操作(实际上它可以提供相同的功能)
- 如果您需要与数据库进行交互,则必须通过某处托管的服务,或通过COM(这意味着具有提升权限的Silverlight 4 OOB)。
- 我不同意Kevin的说法,测试实际上相当简单,所有主要的测试框架和模拟框架都支持Silverlight。您遇到问题的地方是代码覆盖率。 Microsoft测试框架支持代码覆盖率(Premium和以上),否则您可以使用 dotCover。我相信新版本的nCover支持Silverlight,虽然我不是100%肯定。使用 StatLight 从命令行运行Silverlight测试(无论测试框架如何)。
- 如果您还没有使用IoC容器,请选择一个。 Autofac,Ninject,StructureMap,Unity,MEF。 (我的另一个偏见;])
我强烈建议调查可用的MVVM框架。这减少了我通常必须编写的框架代码的很大一部分。框架可能只会让你获得所需要的80%,尽管80%你不需要自己写。我目前偏爱Caliburn Micro,尽管大多数受欢迎的产品都能满足您的需求。
如果我想到更多,我会添加更多。祝你旅途愉快!
Rob Eisenberg(创作者) 卡利 和 Caliburn Micro)有一系列博客文章,讨论将WPF应用程序移植到Silverlight。这可能会让您对一些框架差异有所了解。
第1天
http://devlicio.us/blogs/rob_eisenberg/archive/2010/03/25/porting-nhprof-from-wpf-to-silverlight-day-1.aspx
第2天 http://devlicio.us/blogs/rob_eisenberg/archive/2010/03/29/porting-nhprof-from-wpf-to-silverlight-day-2.aspx
第3天 http://devlicio.us/blogs/rob_eisenberg/archive/2010/03/31/porting-nhprof-from-wpf-to-silverlight-day-3.aspx
第4天 http://devlicio.us/blogs/rob_eisenberg/archive/2010/04/01/porting-nhprof-from-wpf-to-silverlight-day-4.aspx
第5天 http://devlicio.us/blogs/rob_eisenberg/archive/2010/04/02/porting-nhprof-from-wpf-to-silverlight-day-5.aspx
第6天 http://devlicio.us/blogs/rob_eisenberg/archive/2010/04/02/porting-nhprof-from-wpf-to-silverlight-day-6.aspx
第7天 http://devlicio.us/blogs/rob_eisenberg/archive/2010/04/02/porting-nhprof-from-wpf-to-silverlight-day-7.aspx
第8天 http://devlicio.us/blogs/rob_eisenberg/archive/2010/04/02/porting-nhprof-from-wpf-to-silverlight-day-8.aspx
还有一些其他的想法:
- 绑定默认为单向
- 没有DynamicResource
- TabControl是完全不同的
- 无法为类型定义隐式DataTemplates
- 依赖属性中没有CoerceValue
- 事件路由非常基础
- 没有内置的命令结构。你有ICommand接口,而ButtonBase控件有一个Command属性,虽然没有实现ICommand接口的类。
- 缺少x:静态,x:类型
- 所有服务调用都需要位于与UI线程不同的线程上。这基本上要求您学习/实现异步编程策略。看到 这里 和 这里。
- 如前所述,它是一个不同的框架,因此并非所有库都可供您使用。示例:没有XmlDocument - 您必须使用XElement(这可以说更好,尽管如此)
- 导航框架与WPF完全不同。远离它。它只会让你痛苦。 ]
- 你可以在WPF的核心框架中找到的几个控件 Silverlight工具包。下载它,你需要它。
- 没有内置触发器,但可以使用Blend SDK中提供的行为/操作(实际上它可以提供相同的功能)
- 如果您需要与数据库进行交互,则必须通过某处托管的服务,或通过COM(这意味着具有提升权限的Silverlight 4 OOB)。
- 我不同意Kevin的说法,测试实际上相当简单,所有主要的测试框架和模拟框架都支持Silverlight。您遇到问题的地方是代码覆盖率。 Microsoft测试框架支持代码覆盖率(Premium和以上),否则您可以使用 dotCover。我相信新版本的nCover支持Silverlight,虽然我不是100%肯定。使用 StatLight 从命令行运行Silverlight测试(无论测试框架如何)。
- 如果您还没有使用IoC容器,请选择一个。 Autofac,Ninject,StructureMap,Unity,MEF。 (我的另一个偏见;])
我强烈建议调查可用的MVVM框架。这减少了我通常必须编写的框架代码的很大一部分。框架可能只会让你获得所需要的80%,尽管80%你不需要自己写。我目前偏爱Caliburn Micro,尽管大多数受欢迎的产品都能满足您的需求。
如果我想到更多,我会添加更多。祝你旅途愉快!
我真的只为一个真正的应用程序完成了Silverlight ...但我的一个同事是一个伟大的WPF人,所以我听到他的一些抱怨。
- 您可能需要使用WCF服务等来对服务/业务层进行异步查询
- 您正在使用.NET框架的子集,因此您不能将任何类库作为参考包含在内,只能包含Silverlight类库。但是,您可以执行诸如在Silverlight库中链接到其他库中的文件的“链接到现有文件”等内容...只要代码仍然只使用简化集编译。这是一个维护噩梦,但如果您使用相同的代码执行WPF和Silverlight,它可能会使您免于大量复制。确保使其成为文件的链接,而不是文件的副本,或者一个文件中的更改不会更改另一个文件。
- 对ViewModels进行单元测试并不容易。需要Moq您的服务并使用Silverlight单元测试项目。
- 一些减少的功能对于WPF老手来说很烦人。
- 我认为我们的WPF人抱怨无法像在CanFecute方法中那样轻松地绑定他的命令,就像他在WPF中所做的那样。他必须直接从命令或其他东西调用该方法。 (到目前为止,我现在只有一个不同的项目,我才有机会看一下MVVM :(,所以不太确定那个)。
希望有所帮助。