是否可以在绑定中使用DataContext的方法?
E.g。签名public bool ProjectIsActive(int number)
[注意:不是静态],是否可以在绑定中声明?
编辑:根据ywm和Sheridan的建议,我尝试在我的窗口添加一个名为_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>
然后将触发器的绑定设置为:
<Binding Source="{StaticResource ProjectIsActive}" Path="MethodParameters[0]" BindsDirectlyToSource="true" />
它给出了错误: System.Windows.Data错误:35:ObjectDataProvider:尝试在类型上调用方法失败;方法= 'ProjectIsActive';类型=“字符串”; Error ='找不到匹配参数签名的方法。 MissingMethodException:'System.MissingMethodException:Method'System.String.ProjectIsActive'未找到。 at System.RuntimeType.InvokeMember(String name,BindingFlags bindingFlags,Binder binder,Object target,Object [] providedArgs,ParameterModifier [] modifiers,CultureInfo culture,String [] namedParams) 在System.Windows.Data.ObjectDataProvider.InvokeMethodOnInstance(例外&amp; e)'
ObjectDataProvider.MethodParameters的方法签名并没有从输入参数中返回值,我不知道如何继续。
注意:目标也可以通过使用MultiValueConverter和转换方法等来实现。我只是好奇,因为绑定到属性是如此简单,并且绑定到[在我的情况下]方法是如此困难。还有更好的方法可以避免调用方法。
答案 0 :(得分:3)
您可以使用ObjectDataProvider访问从方法返回的数据。
<Window.Resources>
<ObjectDataProvider x:Key="colors"
ObjectType="{x:Type local:ColorHelper}"
MethodName="GetColorNames"/>
</Window.Resources>
答案 1 :(得分:1)
除了@ ywm的答案,您还可以通过以下方式为您的方法提供输入参数:
xmlns:System="clr-namespace:System;assembly=mscorlib"
...
<Window.Resources>
<ObjectDataProvider x:Key="ProjectIsActiveMethod"
ObjectType="{x:Type System:Boolean}" IsAsynchronous="True"
MethodName="ProjectIsActive">
<ObjectDataProvider.MethodParameters>
<System:Int32>10</System:Int32>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</Window.Resources>
答案 2 :(得分:0)
似乎没有办法做到这一点,除非你编写自己的ObjectDataProvider可以进行招标。
这是that post的结果,它解释了如何使用OBjectDataProvider编写FreezableProxy来完成它。