我在视图模型中使用命令来处理事件。例如我正在处理这样的按钮单击事件:
XAML
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<i:InvokeCommandAction Command="{Binding mvvmButtonclick}" />
</i:EventTrigger>
</i:Interaction.Triggers>
视图模型代码
public ICommand mvvmButtonclick
{
get;
private set;
}
用于连接命令的 Viewmodel 构造函数代码
this.mvvmButtonclick = new ActionCommand(this.ButtonClickedEvent);
单击按钮时调用的视图模型中的实际方法
private void ButtonClickedEvent()
{
MessageBox.Show("worked!!!");
}
这有效。所以我的问题是:
- 这是正确的方法吗?
- 有没有一种方法可以将 (object sender, RoutedEventArgs e) 参数传播到我的视图模型中,我应该关心它是否不存在?
- 假设这是一个列表框选择更改事件而不是按钮单击。如何在没有选择项的情况下获取所选项目的值对象发送者、SelectionChangedEventArgs e参数?
我认为您可能错过了交互触发器旨在提供的视图和视图模型之间的分离点。
交互触发器的目的是允许设计者(通常使用 Blend)在视图模型上调用命令。哪个 UI 元素以及 UI 元素上的哪个事件可能调用此类命令设计师 choice.
如果 ViewModel 确实需要特定的派生EventArgs
在这样的命令调用期间提供,那么这会束缚设计者的手脚。它将在视图和视图模型之间创建交互触发器渴望消除的那种耦合。
至于您的最后一个问题,确定列表框中当前选定的项目并在其更改时收到通知的方法是在视图模型上创建一个绑定到SelectedItem
的列表框。此类事情不需要员工交互触发器或命令。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)