我在SL3中有一个数据表单,它使用带有附加行为的Prisms命令来捕获事件。
基本上,它都是连接起来并且工作正常,但是在viewmodel中,我无法看到如何访问事件的事件args。
在VM的构造函数中,我定义了委托命令:
this.EditEnded = new DelegateCommand<object>(o => {
//how can I tell if the button clicked was cancel or save?
}
但是我需要访问DataFormItemEditEndedEventArgs属性才能定义需要做什么?我想根据用户是否取消或提交来执行不同的操作。
答案 0 :(得分:2)
要获取参数,您可以编辑CommandBehaviorBase派生类,如下所示:
private void ItemEditEnded(object sender, DataFormItemEditEndedEventArgs e)
{
this.CommandParameter = e.EditAction;
ExecuteCommand();
}
这会将EditAction(或您想要的任何其他内容)发送到CommandDelegate。在这种情况下,您将不为参数添加附加属性。适当地编辑附加的属性类(省略CommandParameter)。我不喜欢这种方法(看起来有点不标准),我想知道其他人是否有其他建议。
我的意思是,你总是可以为不同类型的事件添加事件(一个用于提交等),这更加纯粹,但这意味着需要额外的代码。在这种情况下你可以逃脱它,但对于其他事件,它将变得不可能(传达鼠标坐标或一些荒谬的东西)。
我的video on Prism Commands。处理更多静态参数有关如何基于静态附加属性对方法进行排序,请参阅“命令参数”部分。
<Button Content="Save"
HorizontalAlignment="Center"
VerticalAlignment="Bottom"
cal:Click.Command="{Binding GetCompanyData}"
cal:Click.CommandParameter="SaveButton"
/>
答案 1 :(得分:0)
也许您应该为单独的按钮和操作声明单独的命令(保存命令和取消命令)。