【发布时间】:2015-12-15 09:09:47
【问题描述】:
模式专家的问题:我正在重构一个应用程序,该应用程序分析(大量数学!)并在画布(窗口)上绘制大量不同的几何图形。
目前实际的绘制是由 Canvas 的容器控件的 ChangeSize 事件触发的辅助类完成的。缩放/平移由使用各种鼠标事件的类似结构处理。
这是一个问题:据我了解,MVVM 将事件处理声明为邪恶,并且希望在视图模型中处理命令 - 我可以这样做,但关键是要正确定位视图模型从模型中获取的几何图形在世界坐标中,视图模型需要知道视图画布的大小,这也是邪恶的。那么,您在哪里(以及如何)进行绘图,特别是从世界坐标到屏幕(画布)的缩放。我看过价值转换器、项目模板等——但这意味着要编写大量额外的中间代码或 XAML 丛林......
我能找到的所有示例都有些简单(只有几个按钮或图片和标签),但是如何在 MVVM 中正确绘制准确的几何图形?
【问题讨论】:
-
“MVVM 将事件处理声明为邪恶”——你从哪里得到所有这些谬误? MVVM 只是希望将职责分离:视图属于什么,应该放在视图中等等。命令是视图和视图模型之间进行通信的一种方式。它不能替代事件处理程序。
-
理解术语“事件处理”。 MVVM 中的 ICommand 或代码隐藏中的 EventHandler 方法只是不同的方式。您总是在当今的 GUI 应用程序中处理事件。此外,MVVM 是 Silverlight、Win Phone、WPF 应用程序的首选模式,不是强制。没有它也可以构建一个应用程序。当您不想遵循 MVVM 时,可能会有一些例外。比如你的应用,IMO。
-
抱歉,如果我的“邪恶”表达踩到了某人的脚趾 - 这只是对范式的轻松描述。是的,我确实理解“事件处理”这个术语是一个更广泛的类别......但是,我的问题是,你能和/或它是否适合编写这样的应用程序而不需要任何代码。