【发布时间】:2013-11-24 07:38:45
【问题描述】:
是否可以在绑定中使用 DataContext 的方法?
例如签名public bool ProjectIsActive(int number) [注意:不是静态的],可以在绑定中声明吗?
编辑:根据 ywm 和 Sheridan 的建议,我尝试将资源添加到我的 Window,名称为 _this。
我把签名改成了public bool ProjectIsActive(object number)。
<Window.Resources>
<ObjectDataProvider x:Key="ProjectIsActive"
ObjectInstance="_this.DataContext"
MethodName="ProjectIsActive">
<ObjectDataProvider.MethodParameters>
<sys:Object></sys:Object>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</Window.Resources>
那么Trigger的Binding设置为:
<Binding Source="{StaticResource ProjectIsActive}" Path="MethodParameters[0]" BindsDirectlyToSource="true" />
它给出了错误: System.Windows.Data 错误:35:ObjectDataProvider:尝试调用类型上的方法失败;方法='ProjectIsActive';类型='字符串';错误='未找到具有匹配参数签名的方法。' MissingMethodException:'System.MissingMethodException:找不到方法'System.String.ProjectIsActive'。 在 System.RuntimeType.InvokeMember(字符串名称、BindingFlags bindingFlags、Binder binder、Object 目标、Object[] providedArgs、ParameterModifier[] 修饰符、CultureInfo 文化、String[] namedParams) 在 System.Windows.Data.ObjectDataProvider.InvokeMethodOnInstance(Exception&e)'
ObjectDataProvider.MethodParameters 的方法签名没有区分返回值和输入参数,我不知道如何进行。
注意:这个目标也可以通过使用 MultiValueConverter 并在 Convert 方法中进行强制转换等来实现。我只是好奇,因为绑定到一个属性是如此简单,而绑定到一个方法 [在我的例子中] 如此困难。还有更好的方法来避免调用方法。
【问题讨论】: