如何在ObjectDataProvider.MethodParameters中传递System.Type?

时间:2017-04-07 07:42:06

标签: .net wpf xaml

我想将带有参数的函数绑定到XAML中的TextBlock。函数参数的类型为System.Type。如何在XAML中将复杂对象标记为MethodParame?

<Window.Resources>
    <ObjectDataProvider x:Key="MyKey" ObjectType="{x:Type MyType}" MethodName="MyMethod">
        <ObjectDataProvider.MethodParameters>
            <System:Int32>123</System:Int32> <!-- e.g. a primitive type parameter -->
            <MyNamespace:MyCustomType>WHAT COMES HERE?</MyNamespace:MyCustomType>
        </ObjectDataProvider.MethodParameters>
    </ObjectDataProvider>
</Window.Resources>
[...]
<TextBlock Text="{Binding Source={StaticResource MyKey}}" />

2 个答案:

答案 0 :(得分:1)

System.Type是一个抽象类,因此您无法传递System.Type类型的参数。

相反,您可以传递string并使用Type获取相应的Type.GetType()

例如

   <ObjectDataProvider x:Key="MyKey" ObjectType="{x:Type local:Class1}" MethodName="Fun">
        <ObjectDataProvider.MethodParameters>
            <sys:String>System.Double</sys:String>
        </ObjectDataProvider.MethodParameters>
    </ObjectDataProvider>

public class Class1
{
    public string Fun(string typename)
    {
        Type type = Type.GetType(typename);
        return type.ToString();
    }
}

答案 1 :(得分:0)

使用x:Type

<ObjectDataProvider x:Key="MyKey" ObjectType="{x:Type MyType}" MethodName="MyMethod">
    <ObjectDataProvider.MethodParameters>
        <System:Int32>123</System:Int32>
        <x:Type TypeName="MyNamespace:MyCustomType"></x:Type>
    </ObjectDataProvider.MethodParameters>
</ObjectDataProvider>