【问题标题】:Passing the current mouse position to a ViewModel?将当前鼠标位置传递给 ViewModel?
【发布时间】:2009-05-27 21:13:03
【问题描述】:

在我的 MVVM 应用程序中,我有一个 Direct3d 渲染窗口,它在一个场景中显示一堆 3d 网格。在那个渲染窗口中,我希望能够单击场景中的一个 3d 网格并移动它,让它跟随鼠标光标。这是典型的 3d 编辑器,在屏幕空间中移动网格。所以我需要能够获得当前的鼠标位置,最好是相对于 Direct3d 渲染窗口。

有什么方法可以做到这一点?

谢谢!

编辑:更改措辞,因为它过于笼统并导致混淆。

【问题讨论】:

    标签: c# wpf xaml mvvm


    【解决方案1】:

    InputManager.Current.PrimaryMouseDevice is probably your best bet.

    将其封装在一个界面中,该界面公开您需要的信息并使用您最喜欢的 IoC 框架将其注入。

    【讨论】:

      【解决方案2】:

      我认为这是思考 MVVM 模式的错误方式。让我通过稍微改变你的问题来说明这一点。

      如果您有一些自定义文本编辑控件,将击键事件传递给 ViewModel 的最佳方式是什么?

      将数据绑定到控件,然后在操作控件时通过绑定更新数据不是更好吗?

      那么,您有想要在 3D 视图中显示的对象列表吗?按原样传递对象,并使用模板绑定将每个对象类型绑定到描述 3D 对象的 DataTemplate,其中包括与对象中 X、Y、Z 项的绑定。

      【讨论】:

      • 嗨卡梅伦!我意识到我对所寻找内容的描述过于模糊和笼统,因此我对其进行了更新以反映我的实际意思:)
      【解决方案3】:

      我会在视图模型上声明一个委托并让视图注册到它。这样viewModel就不需要知道view,也很容易进行单元测试。

      【讨论】:

      • 嗨阿里!我对“注册”部分有点模糊。这与通常的“{Binding MyMouseMoveCommand}”有什么不同吗?并且如果是委托,它是否仍然获得传递给它的参数?
      • 嗨史蒂夫,我来自银光一方,所以我们没有指挥那里,我在想一个 Action 类型的代表或类似的东西......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多