我希望显示一些矢量图形并让用户选择项目。
为了增加起见,假设我正在显示包含
的办公室计划我希望能够针对视图模型编写测试,以检查“逻辑”和“物理”布局。例如。我希望能够编写一个确认墙壁符合角落的测试以及确认它们如何显示的测试。
我还需要测试“将门插入选定的墙”这样的命令
有人试过这样做吗?
数据绑定到图形项有什么问题?
答案 0 :(得分:1)
更新:我越是想到它,我就越倾向于使用具有良好数据绑定支持的自定义控件(对于MVVM很重要)。网上有很多消息来源。
问题的半答案是有两个问题。第一个是显示复杂数据并公开绑定支持,第二个是MVVM实践绑定到它(但这很简单,因为大部分问题出现在绘图中)。 MVVM如何做矢量图形?它没有,控制确实如此。控件如何以可扩展/通用的方式公开它所需的内容?不确定,但CodePlex上的WPF Control Toolkit库将有一些更复杂的例子。
这实际上不是“你去的地方”的答案,但从思维方面的角度来看,我认为一个重要的事情是ViewModel不应该关心它是如何“显示”的(如ViewModel所做的那样)不知道查看)。
然而,并非表示ViewModel不应该关心模型的呈现方式。
用于表示办公室计划(具有高度,x / y坐标等属性)的良好模型结构是重要的部分。然后ViewModel可以验证模型,视图只响应这样的验证结果。这显然在ViewModel和模型之间创建了一个耦合 - 我不确定那里的“规则”是什么。
然后,它的可视化表示将悬挂模型,并且可以使用标准MVVM路由命令样式编码来解决诸如“插入门”之类的命令。在您的情况下,ViewModel响应将在关联的CurrentSelectedWall处向Office Plan模型插入新的Door。
或类似的东西。
我无法回答的问题是:视图与模型之间的紧密耦合是否允许?在我的示例中,Model将保存View的所有关键信息以绘制形状(高度,x / y等)。也许这可以抽象出来。
不幸的是,在XAML中使用简单的数据绑定可能无法创建视图 - 我只能看到以视图代码为重的方式...: - (
替代方案是一个自定义控件,它公开所需的数据并提供数据绑定点来接收数据。
答案 1 :(得分:1)
我会或多或少地做同样的事情。我还没有意识到,但我的想法是有一个ViewModelCanvas,我把逻辑放在哪里,包含的对象是WallViewModel,DoorViewModel等。每个对象都包含coordiantes,orientation和其他属性。 然后在视图层中,我有一个带有ViewModelCanvas的WPFCanvas作为Datacontext,以及每个viewmodel类的模板,用于定义它应该如何显示。
它应该适用于静态可视化。不确定它是否足够灵活,以便有一个交互式视图但是很有可能;)