【问题标题】:How do to MVVM for vector graphics? [closed]如何对矢量图形进行 MVVM? [关闭]
【发布时间】:2012-05-11 03:11:57
【问题描述】:

我希望显示一些矢量图形并让用户选择项目。

为了增强,假设我正在展示一个包含

的办公室计划
  • 墙壁,
  • 转角,
  • 门,
  • 窗户,
  • 办公桌

我希望能够针对视图模型编写测试以检查“逻辑”和“物理”布局。例如。我希望能够编写一个测试来确认墙壁与角落相接以及确认它们是如何显示的。

我还需要测试诸如“将门插入所选墙”之类的命令

有人试过吗?

数据绑定到图形项目有什么问题?

【问题讨论】:

  • “我从哪里开始”的问题很难回答。试试吧,如果有任何具体问题,请随时提出。
  • @Kendall,同意,但是指向博客或其他真实内容的答案也很有价值。

标签: wpf silverlight design-patterns mvvm


【解决方案1】:

更新:我想得越多,我就越倾向于具有良好数据绑定支持的自定义控件(对于 MVVM 很重要)。网上有很多关于这方面的资料。

这个问题的半答案是有两个问题。第一个是复杂数据的显示和公开绑定支持,第二个是 MVVM 对它的绑定实践(但这变得很简单,因为大部分问题都在图中)。 MVVM 是如何做矢量图形的?不会,控制会。控件如何以可扩展/通用的方式公开其需要的内容?不确定,但 CodePlex 上的 WPF Control Toolkit 库会有更多涉及的示例。

这并不是一个真正的“给你”的答案,但从心态的角度来看,我认为需要考虑的重要一点是 ViewModel 不应该关心它是如何“显示”的(就像 ViewModel 一样不知道View)。

但是,并不是说 ViewModel 不应该关心所呈现的模型。

代表办公室平面图的良好模型结构(具有高度、x/y 坐标等属性)是重要部分。然后 ViewModel 可以验证模型,视图简单地响应这些验证结果。这显然会在 ViewModel 和 Model 之间产生耦合——我不确定那里的“规则”是什么。

然后,此模型的视觉表示会挂起,并且可以使用标准 MVVM 路由命令样式编码来解决诸如“插入门”之类的命令。在您的情况下,ViewModel 响应将在关联的 CurrentSelectedWall 处插入一个新的 Door 到 Office Plan 模型。

或者类似的东西。

我无法回答的问题是:视图和模型之间的感知紧密耦合是否允许?在我的示例中,模型将保存视图绘制形状的所有关键信息(高度、x/y 等)。也许这可以抽象出来。

不幸的是,使用 XAML 中的简单数据绑定可能无法创建视图 - 我只能看到一种视图代码繁重的方式来执行此操作... :-(

另一种方法是自定义控件,它公开所需的数据并提供数据绑定点来接收该数据。

【讨论】:

    【解决方案2】:

    我将或多或少地做同样的事情。我还没有意识到,但我的想法是有一个 ViewModelCanvas,我在其中放置逻辑,其中包含的对象是 WallViewModel、DoorViewModel 等。这些对象中的每一个都包含坐标、方向和其他属性。 然后在视图层中,我有一个 WPFCanvas,其中 ViewModelCanvas 作为 Datacontext,每个视图模型类都有一个模板,用于定义它应该如何显示。

    它应该适用于静态可视化。不确定拥有交互式视图是否足够灵活,但很有可能;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-07
      • 1970-01-01
      • 2021-09-10
      • 1970-01-01
      • 2019-12-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多