silverlight命令通过棱镜,获得事件的事件args?

时间:2009-06-26 07:47:47

标签: silverlight prism dataform icommand

我在SL3中有一个数据表单,它使用带有附加行为的Prisms命令来捕获事件。

(这篇博文相当紧密: http://blogs.southworks.net/dschenkelman/2009/04/18/commands-with-attached-behavior-for-silverlight-3-dataform/#comment-607

基本上,它都是连接起来并且工作正常,但是在viewmodel中,我无法看到如何访问事件的事件args。

在VM的构造函数中,我定义了委托命令:

this.EditEnded = new DelegateCommand<object>(o => {
    //how can I tell if the button clicked was cancel or save?
}

但是我需要访问DataFormItemEditEndedEventArgs属性才能定义需要做什么?我想根据用户是否取消或提交来执行不同的操作。

2 个答案:

答案 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)

也许您应该为单独的按钮和操作声明单独的命令(保存命令和取消命令)。