【发布时间】:2009-05-27 21:13:03
【问题描述】:
在我的 MVVM 应用程序中,我有一个 Direct3d 渲染窗口,它在一个场景中显示一堆 3d 网格。在那个渲染窗口中,我希望能够单击场景中的一个 3d 网格并移动它,让它跟随鼠标光标。这是典型的 3d 编辑器,在屏幕空间中移动网格。所以我需要能够获得当前的鼠标位置,最好是相对于 Direct3d 渲染窗口。
有什么方法可以做到这一点?
谢谢!
编辑:更改措辞,因为它过于笼统并导致混淆。
【问题讨论】:
在我的 MVVM 应用程序中,我有一个 Direct3d 渲染窗口,它在一个场景中显示一堆 3d 网格。在那个渲染窗口中,我希望能够单击场景中的一个 3d 网格并移动它,让它跟随鼠标光标。这是典型的 3d 编辑器,在屏幕空间中移动网格。所以我需要能够获得当前的鼠标位置,最好是相对于 Direct3d 渲染窗口。
有什么方法可以做到这一点?
谢谢!
编辑:更改措辞,因为它过于笼统并导致混淆。
【问题讨论】:
InputManager.Current.PrimaryMouseDevice is probably your best bet.
将其封装在一个界面中,该界面公开您需要的信息并使用您最喜欢的 IoC 框架将其注入。
【讨论】:
我认为这是思考 MVVM 模式的错误方式。让我通过稍微改变你的问题来说明这一点。
如果您有一些自定义文本编辑控件,将击键事件传递给 ViewModel 的最佳方式是什么?
将数据绑定到控件,然后在操作控件时通过绑定更新数据不是更好吗?
那么,您有想要在 3D 视图中显示的对象列表吗?按原样传递对象,并使用模板绑定将每个对象类型绑定到描述 3D 对象的 DataTemplate,其中包括与对象中 X、Y、Z 项的绑定。
【讨论】:
我会在视图模型上声明一个委托并让视图注册到它。这样viewModel就不需要知道view,也很容易进行单元测试。
【讨论】: