如何使用MVVM构建图形密集型Silverlight应用程序?

时间:2012-07-31 20:52:53

标签: silverlight mvvm mvvm-light wcf-ria-services

我想使用WCF Ria Services和MVVM设计模式创建Silverlight应用程序。

应用程序的主页面将包含一个“外壳”和大量(10s或100s)不同外观(形状/大小/属性)的对象相互链接(形成一种图形)。 / p>

这些项目需要是鼠标可拖动的,并且需要将当前位置/状态保存到后端数据库。

我觉得实现这一目标的最佳方法是为显示的每个项目设置一个小的ViewModel和View,将所有重要的属性放入ViewModel,然后以某种方式在主“shell”中显示所有这些视图。

但是,我不知道这究竟是如何实现的。我考虑过使用MVVM Light,但没有找到任何可以显示类似内容的例子。

有人能指出一些关于如何做到这一点的例子或想法吗?

3 个答案:

答案 0 :(得分:3)

“当你拥有的只是一把锤子时,一切看起来像钉子”:)

MVVM并非旨在管理您描述的图形密集型情况。它是一种以灵活的方式拼接高级概念的粘合剂。使用MVVM,您将增加影响性能的开销(例如,绑定在后台使用反射)。涉及的对象越多,影响就越大。

我可以建议的最佳起点是想象你需要从第三方控件(例如自定义控件/容器),如果一个实际上不存在,建立它就好像它是第三方自定义控件

在实践中,您会发现自定义控件很少基于MVVM,出于性能原因,不仅仅是因为“它们通常不需要它”。它们可能会为外部接口公开 MVVM兼容的属性,但不会为低级内部公开。

MVVM是一种相对高级的技术。不要觉得你必须在所有事情上实现它。

答案 1 :(得分:0)

跟随MVVM做下一步:

  1. 模型 - 创建模型对象,负责屏幕上形状的提取和持久性坐标;
  2. 视图模型 - 一个视图模型,它将启动获取和持久化模型对象;
  3. 查看 - 在您的情况下,这是您完成大部分工作的地方。使用Canvas面板基于ItemsControl创建自定义控件。自定义控件应该传递ItemsSource中模型对象的集合,允许拖放容器并在用户在某个地方放置容器时调用view model命令

答案 2 :(得分:0)

看一下Telerik控件,特别是radTileView,这似乎有你想要的功能。它们还有一个持久性框架,可以让您将瓷砖的位置保存回数据库。