0

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

为增加起见,假设我正在显示一个办公室计划,其中包含

  • 墙壁,
  • 角落,
  • 门,
  • 视窗,
  • 书桌

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

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

有没有人试过这样做?

数据绑定到图形项目有哪些问题?

4

2 回答 2

1

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

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

于 2012-05-02T07:51:32.397 回答
1

更新:我想得越多,我就越倾向于具有良好数据绑定支持的自定义控件(对 MVVM 很重要)。网络上有很多资源涵盖了这一点。

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

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

然而,这并不是说 ViewModel 不应该关心模型呈现的是什么。

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

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

或类似的东西。

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

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

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

于 2012-05-01T16:01:56.893 回答