在我的MVVM應用程序中,我有一個Direct3d渲染窗口,可以在場景中顯示一堆3D網格。在該渲染窗口中,我希望能夠單擊場景中的其中一個三維網格物體並將其移動,並使其跟隨鼠標指針。這是典型的3D編輯器,在屏幕空間中移動網格。所以我需要能夠獲得當前的鼠標位置,最好是相對於Direct3d渲染窗口。將當前鼠標位置傳遞給ViewModel?
這是什麼方法?
謝謝!
編輯:改變措辭,因爲它太泛化,導致混亂。
在我的MVVM應用程序中,我有一個Direct3d渲染窗口,可以在場景中顯示一堆3D網格。在該渲染窗口中,我希望能夠單擊場景中的其中一個三維網格物體並將其移動,並使其跟隨鼠標指針。這是典型的3D編輯器,在屏幕空間中移動網格。所以我需要能夠獲得當前的鼠標位置,最好是相對於Direct3d渲染窗口。將當前鼠標位置傳遞給ViewModel?
這是什麼方法?
謝謝!
編輯:改變措辭,因爲它太泛化,導致混亂。
InputManager.Current.PrimaryMouseDevice is probably your best bet.
在暴露你需要使用你最喜歡的IoC框架注入它的信息的接口,把它包起來。
我會在viewmodel上聲明一個委託,並將視圖註冊到它。這種方式viewModel不需要知道視圖,並且很容易進行單元測試。
我認爲這是考慮MVVM模式的錯誤方法。讓我通過稍微改變你的問題來說明這一點。
如果您有一些自定義文本編輯控件,將按鍵事件傳遞給ViewModel的最佳方法是什麼?
將數據綁定到控件,然後通過綁定更新數據是否更好?
所以,你有一個你想在3D視圖中顯示的對象列表?按照原樣傳遞對象,並使用模板綁定將每個對象類型綁定到描述3D對象的DataTemplate,其中包括綁定到對象中的X,Y,Z項目。
嗨阿里!我對「註冊」部分有些模糊。那會不同於通常的「{Binding MyMouseMoveCommand}」東西嗎?如果它是一個委託,它是否仍然傳遞給它的參數? – djcouchycouch 2009-05-27 21:54:16
嗨史蒂夫,我來自銀光一面,所以我們沒有在那裏指揮,我正在考慮一個類型的行動或類似的代表... –
2009-05-27 23:04:45