2010-08-24 36 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类。

相关问题