2010-03-21 47 views
0

我有ListView控件在我的應用程序綁定到集合CustomObject List < CustomObject>。 CustomObject有單獨的視圖。這個ListView有單獨的視圖模型。如何從視圖中傳遞EventArgument信息以查看WPF中的模型?

集合List _customobject被包含在ListView ViewModel類中。

我的查詢:

我想要調用,顯示自定義對象,在ListView中的任一行時,用戶雙擊的性能視圖。 ListView雙擊命令綁定到視圖模型中的ListViewDoublClick命令。 CustomObject在listview雙擊命令的事件參數中。爲了實現這一點,我必須將自定義對象(或者我可以從集合中檢索自定義對象的自定義對象的唯一id屬性)作爲命令參數傳遞。

請給我解決方案!

回答

2

最簡單的方法是將雙擊事件處理程序添加到列表中。請記住:MVVM並不意味着視圖中沒有代碼!這意味着視圖只處理視圖問題。您可以提出一個非常好的說法,即EventArgs只對視圖有意義,如果您想將它傳遞給ViewModel,則只應傳遞相關信息。 如果你必須做一些事情,像從EventArgs中提取數據,將它傳遞給ViewModel,這是可以接受和適當的......並且比將EventArgs傳遞到ViewModel,恕我直言,更好。

(我相信我會在這方面得到一些分歧,但處理UI交互是一個View問題,如果另一種方法是編寫一個行爲或使用框架來獲得單個頁面上的單個控件,請記住:YAGNI和模式不是宗教。)

幾個MVVM框架允許你這樣做(雖然有很多關於它是否是個好主意的討論)。特別是,MVVM Light Toolkit不久前添加了這個功能來支持拖放操作(如果我正確記住了博客文章)。

如果你沒有使用MVVM框架,我已經寫下了一個行爲,讓我做到這一點,如果我要在多個地方做同樣的事情。在這種情況下,我通常會從EventArgs中提取我關心的信息(即,您可能並不真正需要完整的事件參數,但您可能在乎哪個項目被點擊並且可能還有其他一些數據位)。

+0

感謝Ben的迴應。您已經明確指出我的擔憂,稱「MVVM並不意味着視圖中沒有代碼」。其實我可以通過在視圖本身中添加一個雙擊事件處理程序並從事件參數中提取我的自定義對象來實現。我想知道是否有可能將事件參數信息傳遞給視圖模型。請讓我知道最佳做法或通常在這種類型的場景中只能從事件參數中訪問信息的情況下完成的事情..同樣很多很多謝謝您的回覆 – 2010-03-21 14:35:02

+0

我不確定是否有單個建議可以歸類爲「最佳實踐」,但通常會考慮傳遞給ViewModel的數據是否真的是ViewData(例如座標,EventArgs等)。如果是這樣,那麼在View中轉換ViewModel數據並將其傳遞給ViewModel上的命令,恕我直言。 – 2010-03-21 17:46:10

相關問題