2

我开始在Silverlight中使用RIA服务和SilverlightFx编写应用程序。 现在这个应用程序是一个非常大的控件之间有很多交互。Silverlight应用程序使用.net Ria服务和SilverlightFX

作为估计它将有大约60-70个用户控件。现在我的问题是......

  1. 选择.Net Ria和SilverlightFx是不是很好? (我的观点是......它很快就不会生产,而且它是一个很大的框架,一旦框架被正确理解,使用框架将有助于单元测试并节省开发时间。)

  2. 阅读完博客我不清楚SilverlightFx如何处理用户控件之间的交互。例如,我有一个用户控件(称为“S”),它具有搜索功能...自动完成和所有...现在我有另一个用户控件(说“R”),显示搜索结果。显示结果面板可以从搜索用户控件或其他用户控件(说F)中使用,它可以给出特定类别的所有项目。我无法搜索和选择类别到一个单一的userontrol。那么该怎么做呢? 如果我创建不同的ViewModels,他们将如何相互交流?

  3. 在每个ViewModel中创建域服务上下文还是在整个应用程序中使用单个服务上下文更好?

回答

2

注到前言答案 - 我Silverlight.FX在作者和建筑师RIA服务...等等因素偏见回复:-) ...

我在两个组合上做了两篇博客文章,您可能会发现有帮助:herehere。这些包括使用DomainContext的基本视图模型场景和使用Silverlight单元测试框架的视图模型的基本单元测试。

Silverlight.FX提供的不仅仅是图形交互。从网站(http://projects.nikhilk.net/SilverlightFX):

  • 应用模型 - SilverlightFX 有更丰富的应用程序对象 提供的服务模式,一个IoC 容器中,主题化的支持,视图 模型(MV-VM),导航和MVC , 之间的各种其他功能。
  • 用户界面组件 - SilverlightFX 提供形式和 视窗,主页状容器, 布局控制和数据绑定 控制一个小集增强 控件,支持。
  • 声明查看 - SilverlightFX提供了一个框架 写作行为,行动, 触发,和命令,并且还 提供了一组外的开箱 实现。
  • 效果和 转换 - SilverlightFX提供 程序动画框架 能够实现补间和 插值和缓动行为。 此外,它提供了简单的 广泛应用的动画,可以将 作为效果应用,并且 以完全声明的方式转换到标准控件。

跨视图模型处理通知的方法是使用某种事件聚合模式,它允许视图模型以分离方式发布和订阅事件。

此功能尚未在Silverlight.FX中,但预计将很快推出。我最近在TechEd南非讲座中展示了这种沟通方式 - 查看幻灯片和代码以实现此目的:http://www.nikhilk.net/TechEd09-South-Africa-Samples.aspx

希望有所帮助。

+0

谢谢Nikhil。我会看一下。 – Tanmoy 2009-08-29 06:45:43

0

嘿,首先,我不知道如果SLFX提供了除了图形交互的任何有用的功能,我建议你看一看prism对之间适当MVVM集成和设计中的正确使用地区,然后通信区(简单地说,用户控件,但有点在其加载更多动态)

  1. 单元测试从SL3接口 意味着你必须有一种手段, 模拟用户输入,也有相当 待办事项这几种方法。其中最容易的是MVVM方法和 ,从而模拟输入到 视图模型。对SL3 的棱镜支持将与WPF 4.0的 版本的合作。棱镜目前没有 支持SL3只是没有导航 框架,因为它与 棱镜的区域导航很多冲突,但他们 执行不同的任务,他们 不重叠功能。

  2. 如果有用户控件“S”和“R”,然后,它们都将共享 公共数据源,作为 视图模型,因此,视图模型内属性 可以通信 与对方,这种情况主要发生在 当OnPropertyChanged事件是 发射。或者点击一个按钮,然后使用棱镜命令 ,您可以将 连接到按钮控制点击方法 到viewmodel中的一个方法。

  3. 这真的取决于的东西,如并发了很多,因为 全部来自SL3调用是异步, 这意味着你可以拍摄3在同一域 上下文查询 一次,和多少个连接 你希望创建到您的WCF 服务。我还没有使用RIA足以 明白你有 选择的影响,所以我不能给你 一个确切的答案,但一般 规则是保持DB连接到 最低(域范围内回收 不会自动转换成自WCF 更少的连接是无状态的 除非另有设计)

+0

您是否告诉同时为“S”和“R”保留相同的ViewModel类,然后usercontrol“F”将如何与它通信?或者更改我的视图模型以使“S”“R”和“F”共享相同的视图模型更好。 – Tanmoy 2009-08-16 12:50:05

+0

如果您在单个视图(页面)上有4个控件,则所有四个控件共享相同的视图模型,每个视图都有自己的视图模型,每个视图由多个控件组成。棱镜的做事方式是在一个视图(页面)内有区域,每个区域都有自己的视图模型,然后有一个机制允许区域进行通信。如果S,R,F和紧密耦合在一个视图上,那么它们应该共享相同的视图模型,当视图显式取决于它们紧密耦合时,解耦视图模型没有意义。 – Neil 2009-08-17 14:05:08

+0

ViewModel是特定于视图的,Model是特定于ViewModel的,这也是向后工作的。 如果你想要在每个控件上使用不同的ViewModel,那么我建议你去区域路由,这对你的问题更有意义,但是这就意味着你会交换单个控件的实现吗? – Neil 2009-08-17 14:06:17

相关问题