【问题标题】:How to architect graphically-intensive Silverlight app using MVVM?如何使用 MVVM 构建图形密集型 Silverlight 应用程序?
【发布时间】:2012-07-29 17:37:26
【问题描述】:

我想使用 WCF Ria 服务和 MVVM 设计模式创建一个 Silverlight 应用程序。

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

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    我可以建议的最佳起点是想象您需要从 3rd 方控件(例如自定义控件/容器)中获得什么,如果实际不存在,则将其构建为第三方自定义控件.

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

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

    【讨论】:

      【解决方案2】:

      在 MVVM 之后进行下一步:

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

      【讨论】:

        【解决方案3】:

        看看 Telerik 控件,特别是 radTileView,这似乎具有您正在寻找的功能。他们还有一个持久性框架,可以让您将图块的位置保存回您的数据库。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-03-03
          • 1970-01-01
          • 1970-01-01
          • 2012-02-11
          • 1970-01-01
          • 1970-01-01
          • 2023-03-27
          相关资源
          最近更新 更多