我在viewmodel中使用命令来处理事件。比如我正在处理像这样的按钮点击事件:
XAML
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<i:InvokeCommandAction Command="{Binding mvvmButtonclick}" />
</i:EventTrigger>
</i:Interaction.Triggers>
Viewmodel代码
public ICommand mvvmButtonclick
{
get;
private set;
}
Viewmodel用于连接命令的构造函数代码
this.mvvmButtonclick = new ActionCommand(this.ButtonClickedEvent);
在点击按钮时调用的viewmodel中的实际方法
private void ButtonClickedEvent()
{
MessageBox.Show("worked!!!");
}
这很有效。所以我的问题是:
答案 0 :(得分:3)
我认为您可能忽略了交互触发器旨在提供的视图和视图模型之间的分离点。
交互触发器的目的是允许设计器(通常使用Blend)在视图模型上调用命令。哪个UI元素和UI元素上的哪个事件可以调用这样的命令是设计器选项。
如果ViewModel确实要求在调用命令期间提供EventArgs
的特定衍生物,那么这将使设计师的手稍微束缚。它会在视图和视图模型之间创建一种耦合,即交互触发器希望消除它。
关于最后一个问题,确定列表框中当前所选项目并在更改时收到通知的方法是在视图模型上创建一个绑定到SelectedItem
的属性的方法。列表框。对于这类事情,不需要员工交互触发器或命令。
答案 1 :(得分:2)
有一些框架(例如Catel)允许转发EventArgs。例如,请参阅此实现:
该类与Silverlight和WPF兼容。
如果您不想使用EventArgs,则需要在ViewModel上创建SelectedObject属性并将其绑定到列表框的SelectedItem。
Catel包括2个示例应用程序(在WPF和Silverlight中),它们使用MVVM和EventToCommand类来编辑列表框中的选定项目。我认为这就是你要找的东西!