2010-08-24 39 views
8

我是MVVM中的新成員。我只是學習這種模式,並希望在我的項目中使用它。我已經瞭解了這種模式的工作原理,並學會了如何使用Commands。但我有問題如何處理另一個控件的事件,例如ListBox SelectionChanged事件。列表框沒有命令屬性如何處理MVVM中的事件

+1

我還沒有使用它,但是您可能能夠使用CollectionView或CollectionViewSource在各種集合類型控件上啓用MVVM。 – 2010-08-24 07:10:07

回答

14

你經常不需要。例如,你可以綁定ListBoxSelectedItem財產的財產在你的視圖模型:

<ListBox ItemsSource="{Binding Customers}" SelectedItem="{Binding SelectedCustomer, Mode=TwoWay}"/> 

這不僅讓您使用您的視圖模型所選擇的客戶,這也讓您的視圖模型通過設置屬性本身來指定選定的客戶。

還有其他技術可以「避免」直接處理代碼隱藏事件。例如,附加的行爲。但是,如果代碼只關注視圖並簡化代碼,則不應該擔心直接處理事件。

+0

有趣的想法。例如,我想要處理DataGrid上的Mouse RightClick事件。在這種情況下,我必須在代碼後面編寫處理程序嗎?還是必須使用附加的行爲? – Polaris 2010-08-24 07:08:26

+1

@寶來。看看那裏的mvvm框架(cinch,mvvm light ...)。您會發現像EventToCommand Behavior這樣的實現,您可以將事件綁定到命令。並且像肯特說的那樣:在編碼視圖相關的東西時,隨意使用codebehing :)例如BringToView在網格或列表框中選擇的項目 – blindmeis 2010-08-24 07:28:19

+0

+1,以便處理僅影響視圖層的事件的註釋。很多人都忘記了這一點...... – 2010-08-24 15:14:47

0

要向控件添加命令屬性,它必須從ICommandSource繼承。 檢查this後,看看它是如何完成的。

0

BookLibraray應用的WPF Application Framework (WAF)展示瞭如何傾聽WPF事件模型 - 視圖 - 視圖模型(MVVM)設計的應用程序。它允許用戶選擇多本書,以便他可以一次刪除所有的書。請參閱BookLibrary.Presentation.Views.BookView類。

相關問題