有没有办法将参数(或多个参数)传递给CallMethodAction
行为?
答案 0 :(得分:8)
尝试使用InvokeCommandAction命令而不是使用CallMethodAction:
<i:Interaction.Triggers>
<i:EventTrigger EventName="TextChanged">
<i:InvokeCommandAction Command="{Binding TextChangedCommand}"
CommandParameter="{Binding ElementName=filterBox, Path=Text}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
希望有所帮助
答案 1 :(得分:4)
经过一些反编译后,发现CallMethodAction
支持使用参数调用方法。但是,CallMethodAction
对预期签名非常严格。方法必须符合以下条件:
public void SomeMethod(object sender, EventArgs args) {
// do something
}
其中args参数可以是EventArgs的子类,因此允许传入(任意数量)自定义参数。例如:
public class MyEventArgs : EventArgs {
public MyEventArgs(MyParam param) {
Param = param;
}
MyParam Param { get; private set; }
}
因此允许以下签名:
public void SomeMethod(object sender, MyEventArgs args) {
var param = args.Param;
// do something
}
作为参考,这里是执行符合性检查的CallMethodAction中的代码:
private static bool AreMethodParamsValid(ParameterInfo[] methodParams)
{
if (methodParams.Length == 2)
{
if (methodParams[0].ParameterType != typeof(object) || !typeof (EventArgs).IsAssignableFrom(methodParams[1].ParameterType))
return false;
}
else if (methodParams.Length != 0)
return false;
return true;
}